Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.persistence一对多-它是如何工作的?_Java_Jpa_Persistence_Entity_One To Many - Fatal编程技术网

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

javax.persistence一对多-它是如何工作的?,java,jpa,persistence,entity,one-to-many,Java,Jpa,Persistence,Entity,One To Many,假设我有2个用户和消息实体。用户有一个名为“messages”的字段,该字段有一个消息列表,并用“@manytone”注释,而Message有一个名为“owner”的字段,如下所示: 用户: @实体 类用户{ … @OneToMany(mappedBy=“所有者”,级联 =级联类型.ALL) 私人列表消息; } 信息: @实体 类消息{ … @多通(fetch=FetchType.LAZY) 私有用户所有者; … } 我的问题-当添加新消息并将所有者设置为特定用户时,持久性是否知道向用户对象

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

用户:

@实体
类用户{

@OneToMany(mappedBy=“所有者”,级联 =级联类型.ALL)
私人列表消息;

}


信息:

@实体
类消息{

@多通(fetch=FetchType.LAZY)
私有用户所有者;

}

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

换句话说:当创建消息并设置“所有者”时,相应的用户“消息”列表是否自动增加1

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

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

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

这样的情况在用户实体上并不少见:

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