Hibernate & EntityManager с объединениями - PullRequest
0 голосов
/ 22 ноября 2010

В моей гипотезе есть аннотированный класс модели User.Эта пользовательская модель также содержит ссылки на два набора:

  • Набор объектов Pet (объект Pet также является аннотированной моделью, представленной в слое данных)
  • Набор объектов Food(объект Pet также является аннотированной моделью, представленной в слое данных)

Когда я извлекаю сущность User из базы данных (entityManager.find (User.class, id)), он автоматически заполняет всеПользовательские поля, но они, очевидно, не заполнят два набора.

Нужно ли мне делать entityManager.createQuery и просто использовать обычный SQL-запрос на соединение, а затем вручную создать объект User?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Ммм, нет? Это, вероятно, не так, как вы хотите это сделать. Я не знаю, почему вы говорите: «Очевидно, это не заполнит два набора». Он вполне способен заполнить наборы для вас, вот в чем-то и дело использование ORM, например спящего, в первую очередь. Ваши объекты делают так, как они должны выглядеть в коде, а вещи «базы данных» обрабатываются максимально автоматически.

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

2 голосов
/ 22 ноября 2010

Если вы сопоставляете свои отношения между Пользователем, домашними животными и едой с помощью OneToMany, вы можете выбрать, будут ли поля автоматически собираться или нет.

См. Документацию API для javax.persistence OneToMany .

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

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