JPA : Datastore Identifiers

A datastore identifier is a simple name of a database object, such as a column, table, index, or view,
and is composed of a sequence of letters, digits, and underscores ( _ ) that represents it's name.
DataNucleus allows users to specify the names of tables, columns, indexes etc but if the user doesn't
specify these DataNucleus will generate names.
Generation of identifier names is controlled by an IdentifierFactory, and DataNucleus provides a
default implementation. You can
provide your own IdentifierFactory plugin
to give your own preferred naming if so desired.
You set the IdentifierFactory by setting the persistence property
datanucleus.identifierFactory. Set it to the symbolic name of the factory you want to use.
JPA defines what datastore identifiers should default to when not specified. DataNucleus provides a
factory that meets this requirement.

IdentifierFactory 'jpa'

The IdentifierFactory "jpa" aims at providing a naming policy consistent with the JPA
specification.

Using the same example above, the rules in this IdentifierFactory mean that, assuming that
the user doesnt specify any <column> elements :-

MyClass will be persisted into a table named MYCLASS

When using datastore identity MYCLASS will have a column called MYCLASS_ID

MyClass.myField1 will be persisted into a column called MYFIELD1

MyElement will be persisted into a table named MYELEMENT

MyClass.elements1 will be persisted into a join table called MYCLASS_MYELEMENT

MYCLASS_ELEMENTS1 will have columns called MYCLASS_MYCLASS_ID (FK to owner table) and
ELEMENTS1_ELEMENT_ID (FK to element table)

MyClass.elements2 will be persisted into a column ELEMENTS2_MYCLASS_ID (FK to owner) table

Any discriminator column will be called DTYPE

Any index column in a List for field MyClass.myField1 will be called
MYFIELD1_ORDER

Any adapter column added to a join table to form part of the primary key will be called IDX

Any version column for a table will be called VERSION

IdentifierFactory - Controlling the Case

The underlying datastore will define what case of identifiers are accepted. By default,
DataNucleus will capitalise names (assuming that the datastore supports it). You can however
influence the case used for identifiers. This is specifiable with the persistence property
datanucleus.identifier.case, having the following values

UpperCase: identifiers are in upper case

LowerCase: identifiers are in lower case

PreserveCase: No case changes are made to the name of the identifier provided by the user
(class name or jdo metadata).

Please be aware that some datastores only support UPPERCASE or lowercase identifiers and so
setting this parameter may have no effect if your database doesn't support that option.Please note also that this case control only applies to DataNucleus-generated identifiers. If
you provide your own identifiers for things like schema/catalog etc then you need to specify
those using the case you wish to use in the datastore (including quoting as necessary)