我们正在将 Hibernate 从 4.3.11 升级到 5.2.12 的范围内从 Hibernate 本机标准转移到 JPA 标准查询,并发现了不同的行为。以前的休眠条件使用带有连接的单个查询来急切地获取一对多的关联实体,但 JPA 使用单独的查询来获取每个根实体的关联实体。
我知道我可以显式设置获取模式,entityRoot.fetch("attributes", JoinType.INNER);
但我们需要在一些 AbstractDao 实现中进行,该实现应该适用于任何急切的一对多关联,因此不能显式设置它。
那么我能否以某种方式告诉 JPA 标准在默认情况下使用连接而不是每个根实体的单独查询在单个查询中急切获取关联实体?
代码示例:
CriteriaBuilder builder = createCriteriaBuilder();
CriteriaQuery<T> criteriaQuery = builder.createQuery(getEntityClass());
Root<T> entityRoot = criteriaQuery.from(getEntityClass());
criteriaQuery.select(entityRoot);
criteriaQuery.where(builder.equal(entityRoot.get("param1"), "value"));
return getEntityManager().createQuery(criteriaQuery).getResultList();