The base class for classes that provide entity model metadata. An {@link EntityModel} defines entity classes, primary keys, secondary keys, andrelationships between entities. For each entity class that is part of the model, a single {@link PrimaryIndex} object and zero or more {@link SecondaryIndex} objects may be accessed via an {@link EntityStore}.
The built-in entity model, the {@link AnnotationModel}, is based on annotations that are added to entity classes and their key fields. Annotations are used in the examples in this package, and it is expected that annotations will normally be used; most readers should therefore skip to the {@link AnnotationModel} class. However, a custom entity model classmay define its own metadata. This can be used to define entity classes and keys using mechanisms other than annotations.
A concrete entity model class should extend this class and implement the {@link #getClassMetadata}, {@link #getEntityMetadata} and {@link #getKnownClasses} methods.
This is an abstract class rather than an interface to allow adding capabilities to the model at a future date without causing incompatibilities. For example, a method may be added in the future for returning new information about the model and subclasses may override this method to return the new information. Any new methods will have default implementations that return default values, and the use of the new information will be optional.
@author Mark Hayes