Исключить загрузку определенных свойств в объекте Hibernate

У меня есть класс сущности

class B{
    @ManyToOne(fetch = FetchType.EAGER)
    private A a;
    @ManyToOne(fetch = FetchType.LAZY)
    private C c;

}

В определенных сценариях я не хочу загружать объект A, поскольку этот объект у меня уже есть. и то же самое для C. Но это конкретные сценарии, которые я вообще не хочу загружать.

есть ли способ указать спящему режиму не загружать определенные свойства объекта сущности. {нет предложений с нетерпением / поиском. Я просто хочу, чтобы это происходило только в определенных случаях]

Примечание. Я использую критерии для получения объекта прямо сейчас.


person Reddy    schedule 05.02.2013    source источник


Ответы (1)


Поскольку вы используете HQL для своих запросов, вы можете указать свой стратегия выборки во время выполнения на основе вашего условия с использованием ключевого слова" fetch ", как показано ниже:

List result = sess.createCriteria(B.class)
    .add( Restrictions.like("name", "yourcondition%") )
    .setFetchMode("a", FetchMode.EAGER)
    .setFetchMode("c", FetchMode.LAZY)
    .list();

Изменить:

Поскольку FetchMode.EAGER и FetchMode.LAZY устарели, использование FetchMode.SELECT или FetchMode.JOIN

List result = sess.createCriteria(B.class)
    .add( Restrictions.like("name", "yourcondition%") )
    .setFetchMode("a", FetchMode.JOIN)
    .setFetchMode("c", FetchMode.SELECT)
    .list();

Если вы хотите избежать выполнения SELECT или JOIN, проверьте здесь.

person Jayamohan    schedule 05.02.2013
comment
Можете ли вы изменить свой пример в соответствии с моим классом. Извините, я запутался;) - person Reddy; 05.02.2013
comment
Я изменился. Я просто хочу, чтобы это происходило только в определенных случаях - как выглядит ваш конкретный случай - person Jayamohan; 05.02.2013
comment
Я мог бы получить объект B с помощью объекта A, в этом случае мне не нужно загружать объект A в объект B. - person Reddy; 05.02.2013
comment
Я сделал это таким образом вернуть критерии.list (); Все еще получаю объект - person Reddy; 05.02.2013
comment
Я читал в Интернете / видел сообщения о том, что объекты EAGER не могут быть загружены LAZY, но объекты LAZY могут быть загружены динамически. - person Reddy; 05.02.2013