JPA : Object/Relational Mapping

When you are using an RDBMS datastore you need to specify how your class will map on to the relational datastore. This part is termed Object-Relational Mapping. This is not required for other types of datastore. When you are persisting to RDBMS datastores you are mapping a series of objects into a series of datastore tables in a schema. These tables are interrelated using foreign-keys. With JPA1 you can define almost fully this object-relational mapping in the MetaData (or in annotations if you so wish).

The design of the persistence layer of an application requiring object-relational mapping can be approached in 3 ways.

  • Forward Mapping - Here you have a set of model classes, and want to design the datastore schema that will store represent these classes.
  • Reverse Mapping - Here you have an existing datastore schema, and want to design your model classes to represent this schema.
  • Meet in the Middle Mapping - Here you have a set of model classes and you have an existing datastore schema, and you want to match them up.

DataNucleus can be used in all of these modes, though provides significant assistance for Forward Mapping cases. In particular, when using this mode you can use the DataNucleus SchemaTool to generate the datastore schema, based on a set of input classes and MetaData files. It should be noted though that DataNucleus SchemaTool also provides modes of operation for updating an existing schema, and hence can also be used for Meet in the Middle Mapping. Additionally, it can be used as a validation mechanism when designing your system in Reverse Mapping mode, where it will inform you of inconsistencies between your classes and your datastore schema.