В моем веб-приложении развернуты @Stateless ejb.Это веб-приложение развернуто в Glassfish V3.0.1
Моя модель домена состоит из двух классов: Master и Slave , причем мастер связан со многими подчиненными.
У меня есть представление jsf MyView , вызывающее метод displaySlaves на моем ejb MyEjb
В методе displaySlaves моего ejb без сохранения состояния MyEjb Я делаю это, все отлично работает:
Master master = getEntityManager().find(Master.class, 0L);
Set<Slave> slaves = master.getSlaves();
System.out.println("Master : " + master + " and slaves "+ slaves.size());
Но если я попытаюсь, с моей точки зрения MyView , чтобы получитьссылка на master ( MyEjb возвращает только экземпляр master, но не вызывает master.getSlaves ()), а затем в MyView я вызываю getSlaves () для возвращенного экземпляра master, который я получаю:
org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию Slave: ни один сеанс или сеанс не закрыт.
Очевидно, когда поток выходит из ejb,сессия закрытаВот причина ошибки.
Но когда я использую eclipseLink вместо hibernate, все в порядке , у меня нет проблем с сеансом.EclipseLink не закрывает транзакцию при выходе из ejb.Это гораздо проще кодировать представление, просматривающее возвращенный экземпляр модели, чем получать все связанные объекты экземпляра модели в методе ejb.
Есть ли у кого-нибудь объяснение или обходной путь, чтобы заставить его работать с Спящий ?Моя предыдущая проблема - просто иллюстрация, и на самом деле у меня есть устаревшее приложение со многими сопоставленными классами, и рефакторинг аннотаций, необходимых для его работы с eclipseLink, кажется огромной задачей.
Любая помощь приветствуется.
Компоненты:
- Glassfish 3.0.1
- windows 7 64 бит JDK Sun 1.6.0.24
- Hibernate 3.5.6-Final
- tiredOldDevelopper v1 final - исчезает .