结合使用Hibernate提取配置文件和JPA Criteria API

时间:2019-04-04 20:04:48

标签: hibernate jpa criteria-api

是否可以将提取配置文件与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();
    }

此操作的目的是通过选择查询而不是联接来构造一个惰性集合。

如果集合渴望,并且使用相同的条件查询以及静态配置,则惰性集合将通过选择查询而不是联接进行初始化。

这是启用配置文件的正确方法吗?还是可以在其他会话中启用它,而不是在当前会话中启用它?

感谢您的帮助

0 个答案:

没有答案