Я довольно новый в JPA и Hibernate, и у меня есть следующая проблема.Почему директива fetch = FetchType.LAZY не работает, когда я возвращаю объект с помощью Hibernate?
в Spring MVC проекта У меня есть этот Tid001Anagpartecipa класса модели, отображающие поля на TID001_ANAGPARTECIPA таблицы, определенной в базе данных:
@Entity
@Table(name="TID001_ANAGPARTECIPA")
@NamedQuery(name="Tid001Anagpartecipa.findAll", query="SELECT t FROM Tid001Anagpartecipa t")
public class Tid001Anagpartecipa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="PRG_PAR")
private Integer prgPar;
................................................................
................................................................
................................................................
@Lob @Basic(fetch=FetchType.LAZY)
@Column(name="OGG_DOC_ALL")
private byte[] oggDocAll;
@Lob @Basic(fetch=FetchType.LAZY)
@Column(name="OGG_DOC_DEL_ALL")
private byte[] oggDocDelAll;
................................................................
................................................................
GETTER & SETTER METHODS
................................................................
................................................................
}
Как вы можете видеть на этом столе есть 2 BLOB поля, аннотированные аннотациями @Lob, эти поля содержат 2 файла, хранящихся в БД.
В этом классе также объявлен этот именованный запрос, что получить все Tid001Anagpartecipa объект хранится в виде записи в TID001_ANAGPARTECIPA таблице:
Как вы можете видеть в предыдущем коде Snipper на @Lob поля использовали ленивый стратегия (по @Basic (fetch = FetchType.LAZY)). Поэтому я ожидал, что при получении объекта Tid001Anagpartecipa эти поля 2 @Lob не инициализируются.
В методе контроллера я выполнить эту операцию, извлечь Tid001Anagpartecipa объект:
Tid001Anagpartecipa anagrafica = getAnagraficaPartecipante(model);
List<Tid002Candidatura> listaCandidatureDB = anagrafica.getTid002Candidaturas();
Объект правильно восстановить, но проблема в том, что предыдущий 2 @Lob поля inizialized и я хочу что эти поля не инициализированы (infact Я использовал @Basic (fetch = FetchType.LAZY) директива).
Почему эти поля получены? Что мне не хватает? Как я могу сказать Hibernate, чтобы не получить эти поля @Lob, когда извлекается Tid001Anagpartecipa?
Tnx
mmm но что я должен изменить в своем коде для работы? – AndreaNobili
Ничего. Вам нужно изменить процесс сборки, чтобы улучшить классы. Если вы используете maven и hibernate> = 4.2.8, вы должны просто иметь доступ к соответствующему плагину для pom.xml. См. Раздел «hibernate-enhance-maven-plugin» здесь https://dzone.com/articles/hibernate-bytecode-enhancement –