Запуск через дерево отношений сущностей вместо отправки определенных запросов DAO - PullRequest
1 голос
/ 20 июня 2011

Как известно, в Seam нет проблем с LazyInitializationException при чтении ссылок сущностей на подобъекты.Итак, есть ли проблема, если я предпочитаю проходить дерево отношений для чтения нужных мне данных вместо того, чтобы отправлять конкретные запросы в DAO соответствующих организаций?Я нарушаю некоторые важные руководящие принципы / принципы?

1 Ответ

0 голосов
/ 23 сентября 2011

Учтите, что фраза:

"в Seam нет проблем с LazyInitializationException"

Это не так.

В шве естьнет проблем с LazyInitializationException, если вы используете шаблон, в котором ваш сеанс сохраняется в границах продолжительного диалога.

Это означает использование контекста персистентности, внедренного в Seam, например:

@In
private EntityManager entityManager;

Или, если вы используете EJB с сохранением состояния (также привязаны к области диалога):

@PersistenceContext(type = PersistenceContextType.EXTENDED) EntityManager em;

Кстати, как только вы поняли это, нет проблем с перемещением по дереву отношений.Вы действительно должны это сделать, если хотите связать его с интерфейсом с помощью JSF.

Учтите, что вы можете столкнуться с некоторой проблемой со скоростью, если вы обращаетесь к отношениям ManyToOne или OneToMany в запросах, которые возвращают более одного результата.Это известно как n + 1 проблема, когда вы в основном запускаете еще одну поездку в базу данных для каждой возвращаемой записи.

Подведем итог:

  • отдельная детальobject -> перейти по дереву отношений
  • Список других объектов -> сделать один запрос к DAO, используя выборку левого соединения.
...