This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
but as I haven't got any answer from there I'm posting it here too in the hope that I find one, as this is very important to me. This forum is my last hope.
In JPA 1.0 I could map the collection association to DocumentSubject (only accessible through the Document entity) like this:
In JPA 2.0 I can get rid of the DocumentSubjectId class, transform DocumentSubject in an @Embeddable and use the @ElementCollection annotation, like this:
So, my question is: what is the recommended to use in this case: relationships to entity classes, like in the first case, or collection of embedded classes, like the second case? Note that I will never access in my application the DocumentSubject separately from the Document class. It really belongs to the Document class. What would you use in JPA 2.0, and why?
Which to use is entirely up to you. I would normally recommend using the OneToMany, as typically even if a class starts out as embeddable, you eventually find that you would like to query and edit it independently.
Embeddables have a bunch of restrictions on them that Entitys do not (can't query directly, can't persist/merge/remove directly, JPA does not currently define inheritance, relationships restrictions).
Using an ElementCollection is much simpler however, so it does have its benefits, especially when prototyping.