2010-11-21 3 views
0

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

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

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

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

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

ответ

2

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

См. API doc for javax.persistence OneToMany.

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

2

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

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

Смежные вопросы