10.2 Datastore Identity

Datastore identity can be used with datastores that provide an identifier that does not depend on the values of fields in an instance. This is the form of identity that object databases have provided for years. It is also supported in a relational JDO implementation by managing an additional primary-key column that is distinct from the columns containing field values.

Existing relational schemas often have a primary-key column that contains a value provided by a sequence or some other facility that can generate unique values for the application. This is especially useful when the entity being modeled does not have an attribute that is a natural real-world identifier, or when the number of attributes necessary to identify an instance uniquely becomes excessive.

The implementation guarantees that the identity value is unique for all instances. You cannot change the identity of an instance if its class uses datastore identity. Datastore identity is the easiest type of identity to use, because the implementation and datastore handle everything automatically; it does not require any additional development on your part.

A JDO implementation's datastore identity class has the following characteristics:

  • It is public.

  • It implements Serializable, allowing you to serialize identity instances.

  • The type of all its nonstatic fields are serializable.

  • All of its serializable fields are public.

  • It has a public no-arg constructor.

  • It overrides toString( ), returning a String that can be used as the parameter for the following String constructor.

  • It has a constructor with a String parameter that creates an identity instance that compares equal to any other identity instance whose toString( ) returns a String that is equal to the String parameter.

The last two characteristics are necessary to create a String representation of an identity and later reconstruct an identity instance with the String by using newObjectIdInstance( ), covered later in this chapter. You cannot test the equality of two datastore identity instances if they were acquired from different JDO implementations.