簡體   English   中英

JPA:使用抽象類查詢OneToOne關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM