我想我在 @ManyToOne
关系的上下文中误解了级联的含义。
案子:
public class User {
@OneToMany(fetch = FetchType.EAGER)
protected Set<Address> userAddresses;
}
public class Address {
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
protected User addressOwner;
}
cascade = CascadeType.ALL
是什么意思?例如,如果我从数据库中删除某个地址,我添加 cascade = CascadeType.ALL
的事实如何影响我的数据(我猜 User
)?
原文由 forhas 发布,翻译遵循 CC BY-SA 4.0 许可协议
CascadeType.ALL
的含义是持久性将传播(级联)所有EntityManager
操作(PERSIST, REMOVE, REFRESH, MERGE, DETACH
)到相关的—实体。在您的情况下,这似乎是个坏主意,因为删除
Address
会导致删除相关的User
。由于一个用户可以有多个地址,其他地址将成为孤儿。然而,相反的情况(注释User
)是有意义的——如果一个地址只属于一个用户,如果这个用户被删除,传播属于一个用户的所有地址的删除是安全的。顺便说一句:您可能希望将
mappedBy="addressOwner"
属性添加到您的User
以向持久性提供程序发出连接列应该位于 ADDRESS 表中的信号。