gpt4 book ai didi

java - Hibernate 查询集合返回的重复项是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:42 25 4
gpt4 key购买 nike

hibernate documentation对于执行查询说:

Queries that make use of eager fetching of collections usually return duplicates of the root objects, but with their collections initialized. You can filter these duplicates through a Set.

例如,如果我有一个 Order 类,其中包含 OrderLines 列表,它们之间具有 一对多 映射。然后,如果我使用 Hibernate 查询,在这种情况下,我的 Order 类是否被称为根对象?那为什么 Hibernate 想要加载重复的元素呢?

请帮助我理解这一点,我是 Hibernate 的新手,所以很难理解这个概念。

最佳答案

根实体是查询选择的实体:

select o from Order o ...

在这种情况下,o是根,类型为 Order .

现在如果你这样做

select o from Order o left join fetch o.lines

而你在数据库中有2个订单,每个订单有3行,那么底层SQL查询将返回6行,Hibernate也会返回一个包含6个订单对象的列表。但是列表将包含第一个订单 3 次,第二个订单 3 次。

你可以通过以下方式避免这种情况

  • 使用Set<Order> deduplicated = new HashSet<Order>(listOfOrders)
  • 添加 distinct查询关键字:

    select distinct o from Order o left join fetch o.lines

关于java - Hibernate 查询集合返回的重复项是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com