2
我有這2類:Java泛型「反向關係」(和JPA)
@Entity
public abstract class Compound {
@OneToMany(fetch = FetchType.EAGER, mappedBy="compound",
targetEntity=Containable.class, cascade = CascadeType.ALL)
private Set<Containable> containables = new HashSet<>();
}
@Entity
public abstract class Containable {
@ManyToOne(optional=true, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Compound compound;
}
我想在一個類型安全的方式實現的是,化合物的具體實施只接受特定的實現可容納的,反之亦然。
我該如何做到這一點?
編輯:
我已經從asenovm的解決方案,只是想仔細檢查它實際上是正確的。
我的後續問題是,如果我有class Compound<T extends Containable>
和class Containable<T extends Compound>
Containable和Compound是原始類型還是我得到錯誤?因爲在class Compound<T extends Containable>
T實際上是一個Containable而不是其他任何東西。
這也是我的第一個想法,但它不適用於每個類的JPA(Hibernate)和Table。 - >在爲化合物A插入一個可容納對象時出現外鍵約束違規,它說:「表中沒有記錄,其ID爲xyz的化合物B」。 – 2013-02-09 07:57:20
並且用'ChemicalCompound'Compound的一種方法,'compound.getCompositions()'現在似乎返回List而不是列表。 (不兼容的類型編譯錯誤)。對我沒有意義... –
2013-02-09 08:32:51