Manager for a datastore that has a schema and maps classes to associated objects in the datastore.
Datastores such as RDBMS will extend this type of StoreManager.

In a "mapped" datastore, a class is associated with a DatastoreClass. Similarly a field of a class is associated
with a DatastoreField. Where a relation is stored separately this is associated with a DatastoreContainerObject.
In an RDBMS datastore this will be

class table

field column

relation join-table / foreign-key

This type of StoreManager allows creation/validation of the schema. A schema is split into
"tables", "columns", "constraints" currently. The PMF/EMF allows specification of a set of properties
that will apply to this type of datastore.

getClassWithPrimaryKeyForClass

Utility to navigate the inheritance hierarchy to find the base class that defines the primary keys
for this tree. This will either go up to the next class in the hierarchy that has a table
OR go up to the base class, whichever is first.

isObjectInserted

Returns whether this object is inserted in the datastore far enough to be considered to be the
supplied type. For example if we have base class A, B extends A and this object is a B, and we
pass in A here then this returns whether the A part of the object is now inserted.

Parameters:

sm - StateManager for the object

className - Name of class that we want to check the insertion level for.

Returns:

Whether the object is inserted in the datastore to this level

setObjectIsInsertedToLevel

Method to set that the specified object is inserted down to the defined datastore class.
When the object is fully inserted (the table is the primary table for this object type)
it is removed from the map of objects being inserted.