假设我有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/