Ленивая загрузка в спящем режиме, правильный путь и некоторые сомнения - PullRequest
0 голосов
/ 08 июня 2018

Мне интересно, почему есть некоторые различия между этим 2 подходом при отложенной загрузке (потому что я ожидал того же самого результата), оба подхода с lazy = true и fetch = "select"

Подход № 1

Session miasession = HibernateUtil.getSessionFactory().getCurrentSession();

Invoice i = (Invoice) miasession.get(Invoice.class, id);    

//the Subject entity is Many to One relation
model.addAttribute("subject", i.getSubject());

В этом подходе я получаю ошибку, когда пытаюсь получить доступ к «субъекту», и ошибка «org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нетСессия "(это трассировка стека https://pastebin.com/3fdDKCV0)

Подход № 2

Session miasession = HibernateUtil.getSessionFactory().getCurrentSession();

Invoice i = (Invoice) miasession.get(Invoice.class, id);            

Subject s = (Subject) miasession.get(Subject.class, i.getSubject().getId());

//the Subject entity is Many to One relation
model.addAttribute("subject", s);

этот работает, но я точно не знаюпочему предыдущий подход не работает

PS: это немного псевдокода, транзакции обрабатываются вне этого метода, я сообщил только какой-то фрагмент кода, чтобы показать проблему:)

1 Ответ

0 голосов
/ 08 июня 2018

Если вы не хотите получать ошибку при первом подходе, вы можете использовать что-то вроде этого:

Session miasession = HibernateUtil.getSessionFactory().getCurrentSession();

Invoice i = (Invoice) miasession.get(Invoice.class, id); 

// load the collection before session is closed
model.addAttribute("subject", Hibernate.initialize(i.getSubject()));

Другой способ решить ленивые проблемы - это использовать OpenSessionInViewFilter в вашем файле web.xml * 1004.*

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