我使用eclipselink作为JPA提供程序。我有一个实体文章,其中有许多作者(此字段标记为@OneToMany(fetch = FetchType.EAGER)
)。文章和作者只使用一个SQL查询(JOIN)加载在一起。
要使用分页,我使用以下代码:
String queryString="SELECT DISTINCT e FROM Article e LEFT JOIN FETCH e.authors";
Query query = em.createQuery(queryString);
query.setHint("eclipselink.join-fetch", "e.authors");
query.setFirstResult(position);
query.setMaxResults(amount);
当使用setFirstResult和setMaxResults时,据我所知,他们在sql查询中定义limit part
。结果我有两个问题:
如何解决这个问题?
答案 0 :(得分:1)
FirstResult和MaxResult不能像在集合中使用fetch JOIN那样工作,因为它们是https://laravel.com/docs/5.3/passport#password-grant-tokens所述的数据库SQL性能操作。
如果您需要绝对分页结果,请不要在集合映射上使用获取联接 - 请改用here。这将使用2个查询,允许第一个使用分页正确返回所需的行,第二个返回集合关系所需的行。指定IN或batch fetching用于限制辅助查询。