Class ImportContext

Plain objects (POJO's) can be imported into a JTransaction to the extent that the POJO class and
the corresponding Permazen model class share the same properties. The simplest example of this is when
the POJO class is also the Permazen model class (implying a non-abstract class; see also
@PermazenType.autogenNonAbstract()). Also possible are POJO
classes and model classes that implement common Java interfaces.

The ObjId for the corresponding imported Permazen object is determined by the configured storageIdMapper.
If storageIdMapper returns null, the POJO is not imported, and nulls replace any copied references to it; otherwise,
the returned object must exist in the transaction. If storageIdMapper is itself null, the default behavior is
to create a new Permazen object using JTransaction.create(Class), providing the POJO's class as the model class.

Instances ensure that an already-imported POJO will be recognized and not imported twice.
Note this determination is based on object identity, not Object.equals().
The storageIdMapper is invoked at most once for any POJO.

Once the target object for a POJO has been identified, common properties are copied, overwriting any previous values.
POJO properties that are not Permzen properties are ignored; conversely, properties that exist in the Permazen model
object type but are missing in the POJO are left unmodified.

Permazen reference fields are automatically imported as POJO's, recursively. In other words, the entire transitive closure
of POJO's reachable from an imported object is imported. Cycles in the graph of references are handled properly.