[英]JPA: Querying a OneToOne relationship with an abstract class
我有兩個具有單向OneToOne關系的類:
@Entity
@Table(name = "TypeA")
public class TypeA implements A
{
...
}
@Entity
@Table(name = "OTHER")
public class Other
{
@OneToOne
private A a;
.....
}
當我保存這些類時,一切正常。 現在,我想基於現有的A檢索Other。我創建了一個CriteriaQuery,它基本上說“ SELECT * FROM OTHERE WHERE a =:a”。 但是,當我在查詢中設置類型為A的對象時,它將失敗。 查看數據庫,我可以看到OTHER.A字段實際上是具有值“ typeA:123”(其中123是A對象的ID)的varchar。 不幸的是,我不能在這里使用雙向映射。
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<Other> cq = criteriaBuilder.createQuery(Other.class);
final Root<Other> root = cq.from(Other.class);
cq.where(cb.equal(root.get(Other_.a), myActualAObject));
final TypedQuery<Other> tq = em.createQuery(cq);
final Other other = tq.getSingleResult();
任何想法如何執行上述查詢?
提前致謝。
干杯菲利普
A是接口,而不是實體,因此,我認為標准的OneToOne映射在不使用提供程序特定代碼的情況下不會起作用-JPA僅允許映射到JPA對象,而不是接口。 為此,您需要在映射中指定目標類型,以便知道“ a”只能是TypeA實體實例。 或者,您可以將類型從A更改為TypeA。
EclipseLink具有可變的OneToOne映射概念,用於在此處映射接口: http : //eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_variableonetoone.htm
我不確定其他提供者的服務是否等同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.