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 PMF property datanucleus.identifierFactory. Set it to the symbolic name of the factory you want to use. JDO doesnt define what the names of datastore identifiers should be but DataNucleus provides the following factories for your use.
In describing the different possible naming conventions available out of the box with DataNucleus we'll use the following example
class MyClass
{
String myField1;
Collection<MyElement> elements1; // Using join table
Collection<MyElement> elements2; // Using foreign-key
}
class MyElement
{
String myElementField;
MyClass myClass2;
}
This became the default for JDO persistence from DataNucleus v2.x onwards and changes a few things over the previous "datanucleus1" factory, attempting to make the naming more concise and consistent (we retain "datanucleus1" for backwards compatibility).
Using the same example above, the rules in this IdentifierFactory mean that, assuming that the user doesnt specify any <column> elements :-
This was the default in DataNucleus v1.x for JDO persistence and provided a reasonable default naming of datastore identifiers using the class and field names as its basis.
Using the example above, the rules in this IdentifierFactory mean that, assuming that the user doesnt specify any <column> elements :-
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 :-
This IdentifierFactory exists for backward compatibility with JPOX 1.2.0. If you experience changes of schema identifiers when migrating from JPOX 1.2.0 to datanucleus, you should give this one a try.
Schema compatibility between JPOX 1.2.0 and datanucleus had been broken e.g. by the number of characters used in hash codes when truncating identifiers: this has changed from 2 to 4.
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 PMF property datanucleus.identifier.case, having the following values
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)