Hibernate как изменить eager, select, batch на lazy load в критериях hibernate - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть много отношений OneToMany, которые нужно загружать с нетерпением в большинстве случаев, таких как:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "bar")
@Fetch(FetchMode.SELECT)
@BatchSize(size = 10)

Однако мне нужно, в очень немногих случаях, изменить его в критериях гибернации на ленивую загрузку (все еще выберите и пакет). Но я не знаю, как это сделать. Когда я пытаюсь найти решение из здесь -

criteria.setFetchMode("propertyName", FetchMode.SELECT);

, оно все равно загружается.

Мои критерии выглядят примерно так:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Bar.class);
criteria.add(Restrictions.eq("valid", true));
criteria.add(Restrictions.idEq(barId));
Bar result = (Bar) criteria.uniqueResult();

Вот сущность, только для иллюстрации ...

@Entity
@Table(name = "BAR", schema = "UD")
public class Bar {
    private List<Foo> foos;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "bar")
    @Fetch(FetchMode.SELECT)
    @BatchSize(size = 10)
    public List<Foo> getFoos() {
        return foos;
    }
}

Я использую Hibernate 5.1.10 .Final

1 Ответ

0 голосов
/ 16 апреля 2020

Я не знаю, возможно ли выполнять выборку по требованию, но для этого есть один метод, вы можете использовать выборку Bar объекта, используя конструктор внутри пользовательского запроса:

@Query("SELECT new BAR( <add other required fields except FOOs> ) from BAR")

Примечание: это отличается от ленивой загрузки. Если вам нужно Foo позже, чем вы должны сделать повторный вызов БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...