gpt4 book ai didi

集合字段上的 JPA 迭代

转载 作者:行者123 更新时间:2023-12-04 14:42:18 30 4
gpt4 key购买 nike

假设有这样一个实体类

@Entity
public class User {
...
public Collection<User> followers;
...
}

假设用户有成千上万的用户关注者。我想分页...我是否必须亲自动手使用 JPQL 才能在没有其他选择的情况下对结果进行分页?

int page = 5;
User u = em.find(User.class, id);

for (User u : u.getFollowers(page, 100)) { // get the 5th 100 result
// do some stuff
}

是否有类似的解决方案或模式?是否可以通过访问字段 u.getFollowers(page, 100) 而无需下面的代码来对集合运行时的字段进行分页?

我已经知道这个了...

int page = 5;
List<User> followers = em.createQuery("select u.followers from User u where u.id=?1", User.class)
.setParameter(1, id).setFirstResult(page*100).setMaxResult(100).getResultList();

最佳答案

您使用的是哪个 JPA 实现?如果您正在使用休眠,则可以利用一些休眠功能。

hibernate documentation 中所述

createFilter() 方法可用于高效检索集合的子集,而无需初始化整个集合。

 List<User> followerPage = session.createFilter( followers, "")
.setFirstResult(500).setMaxResults(100)
.list();

您可以使用 createFilter() 来获取集合的大小而无需对其进行初始化,这对于分页也很重要。

 ( (Integer) session.createFilter( followers, "select count(*)" ).list().get(0) ).intValue()

关于集合字段上的 JPA 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947935/

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