假设我有2个用户和消息实体。用户有一个名为“ messages”的字段,该字段具有消息列表,并带有“ @manyToOne”注释,而Message则有一个名为“ owner”的字段,如下所示:

用户:


  @实体
   班级用户{
    ...
     @OneToMany(mappedBy =“所有者”,级联
     = CascadeType.ALL)
     私人列表消息;
     ...
  
  }




信息:


  @实体
   课堂留言{
      ...
      @ManyToOne(获取= FetchType.LAZY)
      私人用户所有者;
  ...
  }


我的问题-在添加新消息并将所有者设置为特定用户时,持久性是否知道向用户对象的“消息”列表中添加另一个元素?

换句话说:在创建消息并设置“所有者”时-相应的用户“消息”列表是否自动增加了一个?


我很高兴看到一些代码示例。网络上到处都是难以理解的复杂示例。

最佳答案

不,要编写严格正确的代码,您需要在内存中维护双方或双向关系。由于设置了属性,它不会自动将元素添加到其他位置的集合中。

如果您从数据库刷新用户或以其他方式重新加载用户,则将出现新消息,但是在具有L2缓存的系统中,这仍然不完全安全。您应该始终维护关系的双方,以实现最大的可移植性。

在您的User实体上看到这样的东西并不少见:

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

关于java - javax.persistence一对多-它如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4631378/

10-09 03:56