编程语言
首页 > 编程语言> > java – @ManyToOne JPA关联的CascadeType.ALL是什么意思

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