There's no common definition for "shared primary key" that I'm aware of.

But let's just go and create a definition that might make sense and see how JPA would deal with it.

If two tables have the same type of primary key, and some values of one table's PK are also values of another table's PK, this might be a definition of shared primary key.

You can further constrain the problem by requiring that all values of one table's PK must be values of another table's PK, in effect defining a logical foreign key, whether or not the logical foreign key is actually declared as a foreign key.

If there is no logical foreign key, then I'd agree that JPA doesn't address it. A relationship has to have an "owning" side and without any constraints, there cannot be an owner.

If there is a logical foreign key, then there are concepts that apply to modeling the tables' relationship.

If you want to model the two tables as a single Entity, then you can use secondary tables. This model assumes that for each row in the secondary table there is a corresponding row in the primary table. Fields in the Entity can be mapped to columns in the secondary table.

If you want to model the two tables as two Entities, then you can declare a one-to-one relationship between them. You can then navigate between instances of the two Entities, and have the fields of each Entity map to columns in each Entity's own primary table.

Craig

On Jul 16, 2010, at 6:57 PM, KARR, DAVID (ATTSI) wrote:

Would you say that the following statement is accurate or not?

"The JPA specification doesn't have a way to deal with a shared primary
key."

Isn't this what "secondary-table" addresses? Are there other strategies
that apply to this?

Craig L Russell
Architect, Oracle
http://db.apache.org/jdo
408 276-5638 mailto:[email protected]
P.S. A good JDO? O, Gasp!

Reply via email to