当前位置: 首页 > 面试题库 >

JPA 2 —在CriteriaQuery中使用@ElementCollection

郗鹏
2023-03-14
问题内容
    @Entity
    public class Person {

        @ElementCollection
        private List<Location> locations;

        [...]

    }

    @Embeddable
    public class Location {

        private Integer dummy;

        private Date creationDate;

        [...]

    }

给定以下结构,我想执行以下SQL的HQL或CriteriaQuery等效项:

SELECT
    l.*
FROM
    Location l
INNER JOIN
    Person p ON (p.id = l.person_id)
WHERE
    p.id = ? AND l.creationDate > ?

我想找回与给定人员关联的位置列表,其creationDate在给定位置之后。

提前致谢!

标记

编辑***:我已经编辑了SQL,因为这有点误导。我不想独立查询位置。


问题答案:

这是不可能的,您无法查询Embeddable。从JPA Wikibook:

嵌入式收藏

ElementCollection映射可以被用来定义的集合
Embeddable的对象。这不是Embeddable对象的典型用法,因为对象没有嵌入到源对象的表中,而是存储在单独的收集表中。类似于a
OneToMany,不同之处在于目标对象是Embeddable
而不是Entity。这使简单对象的集合易于定义,而无需简单对象定义逆映射IdManyToOne逆映射。
ElementCollection还可以覆盖映射或表的集合,因此可以让多个实体引用同一个Embeddable类,但每个实体都将其依赖对象存储在单独的表中。


使用a ElementCollection代替a 的局限性 OneToMany在于, 不能 独立于其父对象 来查询
,持久化和合并目标对象。它们是严格私有的(从属)对象,与Embedded映射相同。上没有层叠选项
ElementCollection,目标对象始终与其父对象保持,合并或删除。
ElementCollection仍然可以使用提取类型,并且默认为LAZY,与其他集合映射相同。

要实现所需的功能,请使用OneToManyEntity而不是ElementCollectionEmbeddable。或更改您的方法并查询Person



 类似资料:
  • 我正在使用spring-data-elasticsearch。我已经使用带有许多子标准的标准构建了大多数查询条件。现在我想为嵌套字段包含一个简单的查询条件。但是使用uery_stringAPI来标准corms查询,这不适用于嵌套字段。我期待嵌套查询。 如何在没有NativeSearchQuery的情况下使用条件来支持这一点? 嵌套映射 我想查询“ae.su.keyword”字段。构建标准使用此字段

  • 我已经验证了@transaction方法是否正确放置,并且在调试堆栈中,我看到事务拦截器和实体管理器是根据对后端的请求创建的(因此没有guice持久性过滤器) 我的感觉表明问题在于会话上下文。我感觉(但我不能真正理解)它在多个请求上重用了我的持久性上下文。 我已经把一些框架放在一起,使这一切都能工作。我使用resteasy作为jax的实现者。guice(4.0beta4)作为cdi实现者,hibe

  • 问题内容: 我正在使用JPA2。出于安全原因,我正在使用CriteriaQuery进行类型安全的操作(因此,我没有在搜索针对类型查询的任何解决方案,等等)。 我最近遇到了一个需要设置SQL-LIMIT的问题。 经过大量搜索,我仍然没有找到成功的解决方案。 谁能帮我? 问题答案: 在查询上定义限制和偏移量: 从文档中: TypedQuery setFirstResult(int startPosit

  • 问题内容: 我对JPA 2相当陌生,它是CriteriaBuilder / CriteriaQuery API: Java文档 在Java EE 6教程中 我想计算一个CriteriaQuery的结果而不实际检索它们。那有可能吗,我没有找到任何这样的方法,唯一的办法就是这样做: 那不可能是正确的方法… 有解决方案吗? 问题答案: 类型查询将返回。您要查询。 显然,您将希望使用示例中跳过的任何限制和

  • 问题内容: 如何在hibernatePOJO上实现我的唯一约束?假设数据库不包含任何内容。 我在注解中看到了唯一属性,但无法正常工作吗? 如果我想将此约束应用于多个列怎么办? 问题答案: 基本上,没有数据库支持就无法实现唯一约束。 和属性是架构生成工具生成相应约束的指令,它们本身并没有实现约束。 您可以在插入新实体之前进行某种手动检查,但是在这种情况下,您应该意识到并发事务可能存在的问题。 因此,

  • 问题内容: JPA和Hibernate当前都不支持JDK8中JSR-310带来的新日期/时间类(JPA 票证,Hibernate 票证)。尽管如此,我还是希望使用JDK8日期/时间类进行编码,因为它们最终经过了精心设计。特别是,我对感兴趣,而不是不完全支持所有类型,因为我的所有实体都将使用此特定类(或者,所以我认为现在至少是:-) 一种选择是编写一个JPA 2.1定义的类型转换器。但是,我们的应用