Most useful data models involve relationships between classes of data objects. Players are members of guilds, book reviews are about books, messages are posted to message boards, customers place orders, and orders have multiple line items. For logical reasons or architectural reasons, two concepts may be modeled as separate but related classes. Those relationships are as much a part of the data model as the data fields of the objects.
In the App Engine datastore (and most databases), one easy way to
model a relationship between two objects is to store the entity key of one
object as a property of the other, and (if needed) vice versa. The
Key values as a native property value
type, and also provides a way to encode key values as strings. You don’t
need any help from JPA to model relationships this way.
But relationships are so important to data modeling that JPA has a
family of features to support them. In JPA, you can define owned
relationships in the data model that enforce constraints by
managing changes. With owned relationships, you can say that a book has
zero or more book reviews, and JPA ensures that you can’t have a book
review without a book. If you delete a
Book object, JPA knows
to also delete all of its
BookReview objects. In the Java
code, the relationship is represented by a field whose type is of the
related data class, ensuring that only the appropriate classes are used on
either side of the relationship.
The App Engine implementation ...