javax.persistence один ко многим - как это работает? - PullRequest
2 голосов
/ 08 января 2011

Скажите, что у меня есть 2 объекта пользователя и сообщения. У пользователя есть поле с именем «messages», которое содержит список сообщений и помечено как «@manyToOne», а у «Message» есть поле с именем «owner», например:

Пользователь:

@ Entity
Класс пользователя {
...
@OneToMany (mappedBy = "владелец", каскад = CascadeType.ALL)
приватный список сообщений;
...

*

} * 1013


Сообщение:

@ Entity
Сообщение класса {
...
@ManyToOne (fetch = FetchType.LAZY)
владелец частного пользователя;
...
}

Мой вопрос - при добавлении нового сообщения и назначении владельца определенным пользователем, знает ли персистентность о добавлении другого элемента в список "сообщений" объекта пользователя?

Другими словами: при создании сообщения и настройке «владельца» - автоматически увеличивается ли список «сообщений» соответствующего пользователя на единицу?

  • Я буду рад увидеть пример кода. Сеть полна сложных примеров, которые трудно понять ...

1 Ответ

4 голосов
/ 08 января 2011

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

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

Нечто подобное не редкость для вашей пользовательской сущности:

public Message addMessage(Message message) {
  //null checks and duplicate checks omitted
  messages.add(message);
  message.setOwner(this);
  return message;
}
...