Jump to: navigation, search

EclipseLink/Development/JPA2.0/one-to-one via jointable

< EclipseLink‎ | Development
Revision as of 16:03, 14 July 2009 by Andrei.ilitchev.oracle.com (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Updated EntityManager / Query APIs

JPA 2.0 Root | Enhancement Request

Issue Summary

In JPA 2.0 the specification states (11.1.23 JoinTable Annotation): The JoinTable annotation is used in the mapping of entity associations. A JoinTable annotation is specified on the owning side of the association. A join table is typically used in the mapping of many-to-many and unidirectional one-to-many associations. It may also be used to map bidirectional many-to-one/one-to-many associations and one-to-one associations (both bidirectional and unidirectional).

General Solution

Core

Add relation table (JoinTable) support for OneToOneMapping.

OneToOneMapping addressMapping = new OneToOneMapping();
...
addressMapping.setRelationTableMechanism(new RelationTableMechanism());
addressMapping.setRelationTableName("EMP_ADDRESS");
addressMapping.getRelationTableMechanism().addSourceRelationKeyFieldName("EMP_ADDRESS.EMP_ID", "EMPLOYEE.EMP_ID");
addressMapping.getRelationTableMechanism().addTargetRelationKeyFieldName("EMP_ADDRESS.ADDR_ID", "ADDRESS.ADDRESS_ID");
descriptor.addMapping(addressMapping);

In bidirectional case one of the two mappings must be read only. OneToManyMapping with relation table could be paired with either OneToManyMapping or ManyToManyMapping.

Limitations

No HistoryPolicy support for OneToOneMapping's relation table.

Work Required

Implementation Details

Open Issues