hibernate 如何避免使用Criteria API获取惰性关联上的重复实体?

bqucvtff  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(154)

当使用Hibernate 5查询执行join fetch来加载惰性关联时,返回的结果列表可能包含重复的实体。Hibernate支持HINT_PASS_DISTINCT_THROUGH等提示,以避免在结果SQL查询中使用DISTINCT,并有效地过滤掉结果列表中的重复项。
在使用JPA Criteria API时,消除这种重复的最佳实践方法是什么?
请注意以下事项:

qlfbtfca

qlfbtfca1#

javax.persistence.Query#setHintjavax.persistence.TypedQuery#setHint似乎是使用Criteria API提供此类提示的最常用方法。

Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder cBuilder = session.getCriteriaBuilder();
CriteriaQuery<Example> cQuery = cBuilder.createQuery(Example.class);
...
cQuery.distinct(true);
...
Query<Example> query = session.createQuery(cQuery);
query.setHint("HINT_PASS_DISTINCT_THROUGH", false);
return query.getResultList();

相关问题