我有一個相當典型的場景,其中有一個主要的@Entity,並且他內部的所有東西都是可嵌入的(所以裏面的所有東西在沒有父母的情況下都沒有意義)。現在JPA 2.0阻止我要嵌套@Embeddable內部的@ElementCollection在另一個@ElementCollection定義:嵌入式和ElementCollection嵌套
JSR-317 嵌入類和基本類型 可嵌入類(包括內的另一可嵌入類的2.6類別可嵌入類)必須不包含元素集合,也不得包含與多對一或一對一關係以外的實體的關係
現在問題是:這是爲什麼?一個簡單的例子:
@Entity
public class Tournament {
@Id
Long id;
@ElementCollection
@CollectionTable
private List<Edition>;
}
@Embeddable
public class Edition {
@ElementCollection
@CollectionTable
private List<Round>
}
@Embeddable
public class Round {
blabla;
}
這是什麼問題?這只是一個例子,你可以將Round和Edition定義爲實體並解決問題,但在我的情況下,出於多種原因,我需要強制執行,如果沒有他的父項,嵌套的東西是沒有意義的。
爲什麼JPA 2.0必須阻止我這麼做?
正如我在問題中寫到的那樣,模型需要:不應該可以在沒有他的錦標賽的情況下加載版本,並且如果您沒有錦標賽,則不能存在版本。這是ER示意圖中衆所周知的[Weak Entity](弱實體)(http://en.wikipedia.org/wiki/Weak_entity)的概念,但似乎沒有在JPA中很好地實現。 我只是想了解爲什麼在JPA中不能有更多的嵌套可嵌入元素集(可能存在實現問題?),這是在現實世界中描述事物的常用方式。 – Francesco
感謝您的詳細解答。最後,我意識到Embeddable並不完全符合弱實體的想法。一個弱實體應該有一個由外鍵構成的組合主鍵+他自己的id,這對於Embeddable對象來說並不是這種情況。 所以我認爲你給出的最後一個選擇是最合理的,即使我認爲有更直接的東西來映射弱實體,但我錯了。 – Francesco