Сохраняющиеся сущности со ссылками на другие классы сущностей в JPA - PullRequest
1 голос
/ 12 января 2012

Я работаю с 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 имеют значение NULL.

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

1 Ответ

1 голос
/ 12 января 2012

Из компонента <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);
   }
}  
...