Сохранение сущностей со ссылками на другие классы сущностей в JPA

Я работаю с JSF 2.1, Netbeans 7.0.1, Glassfish 3.1.1, JPA + EJB.

Например, у меня есть класс сущностей с именем User, и он имеет ссылку (отношение «многие к одному») с классом сущностей UserType.

Таблица user_type, связанная с сущностью UserType, уже загружена всеми возможными типами пользователей, и в эту таблицу не предполагается добавлять никакие данные. Данные из таблицы user_type используются только для выбора.

В одной из форм я прошу пользователя выбрать UserType для пользователя, создаваемого с помощью тега h: selectOneListBox. В компоненте поддержки я создаю новый объект UserType, устанавливаю для него выбранный идентификатор и помещаю UserType в класс сущности User. Однако все остальные поля в созданном объекте UserType пусты.

Мой вопрос заключается в том, что когда я сохраняю пользователя в базе данных, JPA «поймет», что тип пользователя с таким идентификатором, на который ссылается объект пользователя, уже существует в базе данных и просто обновит (объединит) существующую запись, а не попытается создать новый. Или мне нужно предварительно загрузить нужный объект UserType из базы данных по его идентификатору, а затем поместить его в User и попросить JPA обновить UserType?


person Nurjan    schedule 12.01.2012    source источник


Ответы (1)


Из компонента <h:selectOneListBox>, я думаю, вы должны получить только ID из UserType. После этого вы можете попросить свой EJB создать отношение для вас. Это должно выглядеть так:

@Stateless
public class MrStatelessBean {
   public void createUser(User u, long typeID) {
      UserType type = em.find(UserType.class, typeID);
      u.setUserType(type);
      em.persist(u);
   }
}  
person Mr.J4mes    schedule 12.01.2012