Использование профиля извлечения Hibernate с JPA Criteria API - PullRequest
1 голос
/ 04 апреля 2019

Можно ли использовать профиль выборки вместе с API критериев JPA?

Хотя он специфичен для спящего режима, но потому, что он настроен на уровне сеанса, и зная, что его целью является замена статической конфигурации спящего режима @Fetch.(FetchMode.SELECT), мне интересно, почему это игнорируется в моем случае, это ожидаемое поведение hibernate?

здесь после снимка кода того, что я сделал.

@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();
    }

Цель этого состоит в том, чтобы создать ленивую коллекцию с запросами выбора вместо соединения.

В случае, если коллекция стремится, и с использованием того же критерия запроса наряду со статической конфигурацией,Ленивые коллекции инициализируются запросами выбора, а не объединением.

Это правильный способ включить профиль?или он может быть включен в другом сеансе, а не в текущем?

Спасибо за любую помощь

...