gpt4 book ai didi

hibernate - 使用 Hibernate 标准和 FetchMode.JOIN 进行分页

转载 作者:行者123 更新时间:2023-12-04 22:00:37 25 4
gpt4 key购买 nike

我有两张 table ,“玩家”和“元素”。玩家有一个元素 list 。我想使用分页检索玩家及其所有项目。我想根据玩家进行分页,而不考虑有多少项目。

所以我做这样的事情:

Criteria c = session.createCriteria(Players.class).setFetchMode("items", FetchMode.JOIN);
c.addOrder(Order.asc("playerID"));
c.setFirstResult(0);
c.setMaxResults(25);
List<Player> players = c.list();

这是要给我前 25 个玩家,还是给我前 25 个项目(按玩家分组)?我想知道这种行为是否像 JPA 查询那样未定义,或者是否有保证的答案。

无论如何,什么是 Criteria 查询,可以为我提供前 25 名玩家或前 25 名玩家-元素组合(按玩家 ID 排序,然后是元素 ID)?

最佳答案

来自 Hibernate 的“高级问题”常见问题解答:

http://community.jboss.org/wiki/HibernateFAQ-AdvancedProblems

It should be also obvious why resultset row-based "limit" operations, such as setFirstResult(5) and setMaxResults(10) do not work with these kind of eager fetch queries. If you limit the resultset to a certain number of rows, you cut off data randomly. One day Hibernate might be smart enough to know that if you call setFirstResult() or setMaxResults() it should not use a join, but a second SQL SELECT. Try it, your version of Hibernate might already be smart enough. If not, write two queries, one for limiting stuff, the other for eager fetching.



换句话说,Hibernate 不支持这一点。如果您更聪明并且知道 Hibernate 是如何实现的,那么很明显 setFirstResult 和 setMaxResults 在所有情况下都不会像分页那样远程执行任何操作。很明显,它不需要记录。

关于hibernate - 使用 Hibernate 标准和 FetchMode.JOIN 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6365930/

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