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.
|