gpt4 book ai didi

java - 获取连接返回的行数超出应有的行数

转载 作者:行者123 更新时间:2023-12-01 14:19:30 25 4
gpt4 key购买 nike

我在进行一些连接时遇到了一个奇怪的问题。简而言之,如果我执行左连接,我会得到正确的行数。如果我执行左连接获取,我会得到比预期更多的行。

我的实体类是(为简洁起见,使用伪代码)

public class One {
...
private Set<Two> twos;
}

public class Two {
...
private Set<Three> threes;
}

public class Three {
...
}

在我的关系中,类中有四个,每个类有九个 p>

我本以为会返回一个一级,其中有四个二,并且在这两个二级中,每个二级都有九个三。

如果我使用我就会得到这个

List<One> res = em.createQuery("select o from One o left join o.twos t left join t.threes where o.id = 322", One.class).getResultList();
List<Two> twos = resultList.get(0).getTwos(); //results in four twos - CORRECT

List<One> res = em.createQuery("select o from One o left join fetch o.twos t left join t.threes where o.id = 322", One.class).getResultList();
List<Two> twos = resultList.get(0).getTwos(); //results in four twos - CORRECT

List<One> res = em.createQuery("select o from One o left join fetch o.twos t left join fetch.threes where o.id = 322", One.class).getResultList();
List<Two> twos = resultList.get(0).getTwos(); //results in thirty size twos - *INCORRECT* (is four * nine)

为什么第二次获取会导致它倍增。我的数据库存在性能问题,因此想要进行获取连接来尝试改进它们。通过进行提取,我似乎得到了比预期更多的结果。

我使用 Oracle XE 作为我的数据库,使用 JPA2/hibernate 作为我的 ORM。

谢谢

最佳答案

根据 @JB Nizet 的评论,我在我的层次结构中发现了一个虚假列表。为了解决这个问题,你需要确保所有的东西都使用一个集合。如果您有多个列表,您将收到有关无法获取多个包的 JPA 错误。如果您有一个列表,您不会这样做,但最终会得到重复的列表

关于java - 获取连接返回的行数超出应有的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741841/

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