Учтите, что фраза:
"в Seam нет проблем с LazyInitializationException"
Это не так.
В шве естьнет проблем с LazyInitializationException, если вы используете шаблон, в котором ваш сеанс сохраняется в границах продолжительного диалога.
Это означает использование контекста персистентности, внедренного в Seam, например:
@In
private EntityManager entityManager;
Или, если вы используете EJB с сохранением состояния (также привязаны к области диалога):
@PersistenceContext(type = PersistenceContextType.EXTENDED) EntityManager em;
Кстати, как только вы поняли это, нет проблем с перемещением по дереву отношений.Вы действительно должны это сделать, если хотите связать его с интерфейсом с помощью JSF.
Учтите, что вы можете столкнуться с некоторой проблемой со скоростью, если вы обращаетесь к отношениям ManyToOne или OneToMany в запросах, которые возвращают более одного результата.Это известно как n + 1 проблема, когда вы в основном запускаете еще одну поездку в базу данных для каждой возвращаемой записи.
Подведем итог:
- отдельная детальobject -> перейти по дереву отношений
- Список других объектов -> сделать один запрос к DAO, используя выборку левого соединения.