javax.persistence one to many - как это работает?

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

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

@Entity
Пользователь класса {
...
@OneToMany (mappedBy = "owner", cascade = CascadeType.ALL)
сообщения личного списка;
...

}


Сообщение:

@Entity
Сообщение класса {
...
@ManyToOne (fetch = FetchType.LAZY)
private User owner;
...
}

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

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

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

person orshachar    schedule 07.01.2011    source источник


Ответы (1)


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

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

Нечто подобное не так уж редко можно увидеть на вашем объекте User:

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