我使用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
。结果我有两个问题:
怎么解决这个问题?
FirstResult和MaxResult不能像在集合中使用fetch JOIN那样工作,因为它们是here所描述的数据库SQL性能操作。
如果您需要绝对分页结果,请不要在集合映射上使用获取连接 - 请改用batch fetching。这将使用2个查询,允许第一个使用分页正确返回所需的行,第二个返回集合关系所需的行。指定IN或batch.type用于限制辅助查询。