是否可以将提取配置文件与JPA标准API一起使用?
尽管它是休眠专用的,但是因为它已配置 在会话级别,并且知道其目的是取代休眠模式 @Fetch(FetchMode.SELECT)的静态配置,我想知道为什么在我的情况下忽略它,这是休眠的预期行为吗?
这里是我所做的代码快照之后。
@Fetch(FetchMode.SELECT)
@OneToMany(cascade= {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="entityB", orphanRemoval= true, fetch= FetchType.LAZY)
private List<EntityA> aList = new ArrayList<>();
<fetch-profile name="profile-for-select-A">
<fetch entity="EntityB" association="aList" style="select"/>
</fetch-profile>
@Transactional(readOnly=true)
public List<EntityB> find(){
Session session = entityManager.unwrap(Session.class);
session.enableFetchProfile("profile-for-select-A");
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<EntityB> criteriaQuery = builder.createQuery(EntityA.class);
Root<EntityB> root = criteriaQuery.from(EntityB.class);
criteriaQuery.distinct(true);
TypedQuery<EntityB> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.setFirstResult(0);
typedQuery.setMaxResults(50);
return typedQuery.getResultList();
}
此操作的目的是通过选择查询而不是联接来构造一个惰性集合。
如果集合渴望,并且使用相同的条件查询以及静态配置,则惰性集合将通过选择查询而不是联接进行初始化。
这是启用配置文件的正确方法吗?还是可以在其他会话中启用它,而不是在当前会话中启用它?
感谢您的帮助