说我有2个用户和消息的提交。用户有一个称为“消息”字段,其具有消息的列表,并标注有“@ManyToOne”和消息像下面有一个字段称为“拥有者”:
用户:
@Entity
班级用户{
...
@OneToMany(mappedBy =“owner”,级联 = CascadeType.ALL)
私人列表消息;
......}
消息:
@Entity
类消息{
... ... @ManyToOne(fetch = FetchType.LAZY)
私人用户所有者;
...... }
我的问题 - 在添加新消息并将所有者设置为特定用户时,持久性是否知道将另一个元素添加到用户对象的“消息”列表中?
换句话说:在创建消息并设置“所有者”时 - 相应的用户“消息”列表会自动增加一个吗?
答案 0 :(得分:4)
不,要编写严格正确的代码,您需要在内存中保持双方或双向关系。由于设置了属性,它不会在其他地方自动添加元素。
如果您从数据库刷新用户或以其他方式重新加载,新消息将在那里,但在具有L2缓存的系统中仍然不完全安全。您应该始终保持关系的两面以获得最大的可移植性。
在您的用户实体上看到这样的事情并不常见:
public Message addMessage(Message message) {
//null checks and duplicate checks omitted
messages.add(message);
message.setOwner(this);
return message;
}