当前位置: 首页 > 知识库问答 >
问题:

JPA:查询与抽象类的OneToOne关系

裴昕
2023-03-14

我有两个类具有单向的单人关系:

@Entity
@Table(name = "TypeA")
public class TypeA implements A
{
    ...
}

@Entity
@Table(name = "OTHER")
public class Other
{
    @OneToOne
    private A a;

    .....
}

当我救了这些类,一切都很好。现在,我想基于现有的a检索另一个。我创建了一个CriteriaQuery,它基本上是“Select*FROM OTHERE WHERE a=:a”。但是当我将A类型的对象设置到查询中时,它将失败。查看数据库,我可以看到另一个.a字段实际上是一个varchar,其值为“typeA:123”(其中123是a对象的ID)。不幸的是,我不能在这里使用双向映射。

    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();

有什么想法如何执行上面提到的查询吗?

提前道谢。

为菲利普干杯

共有1个答案

徐佐
2023-03-14

A是一个接口,而不是一个实体,所以我认为标准的OneToOne映射如果不使用特定于提供程序的代码是行不通的-JPA只允许映射到JPA对象,而不是接口。为此,您需要在映射中指定目标类型,以便它知道'a'只能是TypeA实体实例。也可以将类型从A更改为TypeA。

EclipseLink有一个用于映射接口的变量OneToOne映射概念:http://eclipse.org/EclipseLink/documentation/2.4/jpa/extensions/a_variableOneToOne.htm

我不确定其他供应商有什么是等同的。

 类似资料:
  • 我有和。他们有一个不可撤销的关系。 如何查询具有空的所有对象? 因为如果我这样做: JPA引擎在两个表之间进行连接,并放置一个无用的WHERE子句()。恢复时,它会执行一个无用的本机SQL。怎么能 当前解决方案: 阅读OpenJPA文档时,我发现应该使用本机查询来解决JPA的限制。我可以很容易地使用本机查询,我目前正在这样做,但我想避免使用它。

  • 问题内容: 我有一个抽象的DAO类,它使用参数化类型(实体)和(主键)。在每个实体中我都有一个。我想动态调用此命名查询而不知道其确切名称和参数名称。 例如,假设以下实体 和这个 我应该如何实现该方法,以便不需要知道确切的名称和参数名称? 问题答案: 在您的示例中,命名查询的命名约定通常为“ City.findByName”,因此,我将尝试更改命名查询以遵循此模式。然后,此查询的参数也应具有相同的名

  • 我正在开发一个人力资源管理应用程序,所以我对如何通过JPA管理实体感到困惑。 我的情况是一组多语言上下文中的表:-employees-departments-languages-departments_languages 在我的数据库表之后: 从这个查询中,我需要员工信息,以及部门名称(假设languageId为1) 从eclipse JPA控制台执行查询将返回一个Employee对象,该对象具有

  • 我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗

  • 我正在开发应用程序来学习PostgreSQL上的HiberNate。我目前正在尝试将变量添加到具有OneToOne关系的数据库中。 首先,我用下面的模式在数据库中创建了两个表。在表上,它有主键,也是表的外键。 然后我创建了两个类,和。是具有OneToOne关系的的子类。我使用下面的代码添加作为属性的。 但是上面代码的问题是HiberNate首先执行子查询,而不是父查询。 Hibernate:在pe

  • 问题内容: 我正在与Django建立一个个人项目来训练自己(因为我爱Django,但我错过了技能)。我有基本的要求,我知道Python,即使没有三次,我也仔细阅读了Django的书两次。 我的目标是使用基于Django的Web界面创建一个简单的监视服务,使我可以检查“节点”(服务器)的状态。每个节点都有多个“服务”。该应用程序检查每个节点的每个服务的可用性。 我的问题是我不知道如何在数据库中表示不