Могу ли я установить отношение сущности только с идентификатором? - PullRequest
6 голосов
/ 21 октября 2011

У меня есть объект JPA (Hibernate):

@Entity class Transaction {

  @ManyToOne
  private Room room;

}

Когда я создаю новый Transaction, я знаю идентификатор Room, на который он должен ссылаться (но у меня нет объекта Room). Могу ли я как-то создать и сохранить Transaction только с этой информацией, или мне действительно нужно:

Room room = em.find(roomId, Room.class);
em.persist(new Transaction(room, ...));

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать EntityManager.getReference() для получения прокси связанной сущности без доступа к базе данных. Этот прокси-сервер инициализируется ленивым и будет инициализирован только при запросе чего-либо, кроме идентификатора, если сущность.

0 голосов
/ 25 октября 2011

У меня была похожая проблема, когда я нашел альтернативное решение, но, возможно, это не лучший способ.

Теперь, поскольку отображение зависит от roomId , создайте конструктор Комната (введите roomId) и установите этот компонент перед сохранением компонента транзакции .Поэтому необходимо получить данные из БД.Какая гибернация заботится об идентификаторе, необходимом для отображения бинов.

Я использовал этот подход для получения данных, и я надеюсь, что вы не хотите, чтобы Room обновлялся, когда выобновление Транзакция .Так что установите insert, обновите свойства сопоставлений на false.

...