Ленивая загрузка коллекции в другую транзакцию? - PullRequest
0 голосов
/ 13 ноября 2018

Ребята, я понял, что если вы загрузите объект, закроете сеанс в режиме гибернации, а затем попытаетесь получить информацию о связанных объектах, в то время как FetchType этой ассоциации является LAZY, это, очевидно, даст вам LazyInitializationException. Может кто-нибудь сказать мне, почему, если я начну другую транзакцию и затем попытаюсь загрузить связанные объекты, я все еще получу это исключение? Допустим, у меня есть класс инструктора и один курс для многих. Курсы лениво загружены.

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Instructor instructor= session.get(Instructor.class, id);
session.getTransaction().commit();

session = sessionFactory.getCurrentSession();
session.beginTransaction();
System.out.println(instructor.getCourses());

session.getTransaction().commit();

почему я по-прежнему получаю LazyInitializationException?

1 Ответ

0 голосов
/ 13 ноября 2018

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

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

Тем не менее, можно расширить отложенную загрузку между транзакциями, используя «расширенный контекст постоянства» - но эта функция редко используется в моем опыте.

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