javax.persistence一对多 - 它是如何工作的?

时间:2011-01-07 23:55:39

标签: java jpa persistence entity one-to-many

说我有2个用户和消息的提交。用户有一个称为“消息”字段,其具有消息的列表,并标注有“@ManyToOne”和消息像下面有一个字段称为“拥有者”:

用户:

  

@Entity
   班级用户{
    ...
     @OneToMany(mappedBy =“owner”,级联      = CascadeType.ALL)
     私人列表消息;
     ......

     

}


消息:

  

@Entity
   类消息{   
... ...       @ManyToOne(fetch = FetchType.LAZY)
      私人用户所有者;
  ......   }

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

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

  • 我很高兴看到一些代码示例。网络上充满了难以理解的复杂例子......

1 个答案:

答案 0 :(得分:4)

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

如果您从数据库刷新用户或以其他方式重新加载,新消息将在那里,但在具有L2缓存的系统中仍然不完全安全。您应该始终保持关系的两面以获得最大的可移植性。

在您的用户实体上看到这样的事情并不常见:

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