java – @ManyToOne JPA关联的CascadeType.ALL是什么意思
作者:互联网
我想我在@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的事实如何影响我的数据(用户,我猜)?
解决方法:
CascadeType.ALL的含义是持久性将所有EntityManager操作(PERSIST,REMOVE,REFRESH,MERGE,DETACH)传播(级联)到相关实体.
在您的情况下,似乎是个坏主意,因为删除地址会导致删除相关用户.由于用户可以拥有多个地址,因此其他地址将成为孤儿.然而,相反的情况(注释用户)是有意义的 – 如果地址仅属于单个用户,则如果删除该用户,则传播删除属于用户的所有地址是安全的.
顺便说一句:您可能希望向用户添加mappedBy =“addressOwner”属性,以向持久性提供程序发出连接列应该在ADDRESS表中的信号.
标签:many-to-one,java,jpa,cascade,one-to-many 来源: https://codeday.me/bug/20190915/1805393.html