繁体   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