Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/Development/JPA2.0/one-to-one via jointable
Contents
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.