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.
Difference between revisions of "EclipseLink/Development/JPA 2.0/nested embedding"
< EclipseLink | Development | JPA 2.0
m (New page: = Nested Embedding = JPA 2.0 Root | [http://bugs.eclipse.org/207823 Enhancement Request] ==References== *See section 2.1.5 and 9.1.34 "Embeddable Cl...) |
m (→Issue Summary) |
||
Line 5: | Line 5: | ||
*See section 2.1.5 and 9.1.34 "Embeddable Classes"/"Embeddable Annotation" of the [http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html JSR-220 JPA 1.0 API Specification] | *See section 2.1.5 and 9.1.34 "Embeddable Classes"/"Embeddable Annotation" of the [http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html JSR-220 JPA 1.0 API Specification] | ||
*See section 2.5, 2.6 and 9.1.12 "Embeddable Classes" of the [http://jcp.org/en/jsr/detail?id=317 JSR-317 JPA 2.0 API Specification] | *See section 2.5, 2.6 and 9.1.12 "Embeddable Classes" of the [http://jcp.org/en/jsr/detail?id=317 JSR-317 JPA 2.0 API Specification] | ||
+ | ==Requirements== | ||
+ | The following are new requirements introduced in the JPA 2.0 specification | ||
+ | *R1: An embeddable class may be used to represent the state of another embeddable class. | ||
+ | *R2: An embeddable class (including an embeddable class within another embeddable class) may contain a collection of a basic type or other embeddable class.[17] | ||
+ | *R3: Direct or indirect circular containment dependencies among embeddable classes are not permitted. | ||
+ | *R4.0: An embeddable class may contain a relationship to an entity or collection of entities. | ||
+ | *R4.1: Since instances of embeddable classes themselves have no persistent identity, the relationship from the referenced entity is to the entity which contains the embeddable instance(s) and not to the embeddable itself.[18] | ||
+ | *R4.2: An embeddable class that is used as an embedded id or as a map key must not contain such a relationship. | ||
+ | |||
==Issue Summary== | ==Issue Summary== | ||
*I1: Access type for an embeddable is determined by the entity or the embeddable in which it is embedded - see 2.5 of the [http://jcp.org/en/jsr/detail?id=317 spec]. | *I1: Access type for an embeddable is determined by the entity or the embeddable in which it is embedded - see 2.5 of the [http://jcp.org/en/jsr/detail?id=317 spec]. | ||
+ | |||
==General Solution== | ==General Solution== | ||
Revision as of 15:03, 24 September 2008
Contents
Nested Embedding
JPA 2.0 Root | Enhancement Request
References
- See section 2.1.5 and 9.1.34 "Embeddable Classes"/"Embeddable Annotation" of the JSR-220 JPA 1.0 API Specification
- See section 2.5, 2.6 and 9.1.12 "Embeddable Classes" of the JSR-317 JPA 2.0 API Specification
Requirements
The following are new requirements introduced in the JPA 2.0 specification
- R1: An embeddable class may be used to represent the state of another embeddable class.
- R2: An embeddable class (including an embeddable class within another embeddable class) may contain a collection of a basic type or other embeddable class.[17]
- R3: Direct or indirect circular containment dependencies among embeddable classes are not permitted.
- R4.0: An embeddable class may contain a relationship to an entity or collection of entities.
- R4.1: Since instances of embeddable classes themselves have no persistent identity, the relationship from the referenced entity is to the entity which contains the embeddable instance(s) and not to the embeddable itself.[18]
- R4.2: An embeddable class that is used as an embedded id or as a map key must not contain such a relationship.
Issue Summary
- I1: Access type for an embeddable is determined by the entity or the embeddable in which it is embedded - see 2.5 of the spec.
General Solution
Analysis
- In the JPA 2.0 specification, the following changes to the description of embeddable classes are made.
- Collections of embeddables are supported
- @EmbeddedId annotation is used when the the composite primary key of an entity or mapped superclass is an embeddable
Design
Test Model
The following test model from eclipselink.jpa.test/org.eclipse.persistence.testing.models.jpa.complexaggregate.HockeyTeam will be used. The embeddable classes Vitals, TeamVitals and PersonalVitals are bound to their owning Entity (HockeyPlayer) and are not sharable in HockeyTeam or Role.
Implementation
Work Required
- For all tests verify that both JPA and ORM implementations adhere to the JPA 2.0 specification
- Extend test model in eclipselink.jpa.test
- Add model that includes an @EmbeddedId embedded composite primary key