小编典典

Java @ManyToOne JPA关联的CascadeType.ALL是什么意思

java

我认为我误解了@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我猜是)?


阅读 567

收藏
2020-03-11

共1个答案

小编典典

含义CascadeType.ALL是,持久性会将所有EntityManager操作(PERSIST, REMOVE, REFRESH, MERGE, DETACH)传播(层叠)到相关实体。

在你的情况下,似乎是个坏主意,因为删除Address会导致删除related User。由于用户可以具有多个地址,因此其他地址将成为孤立地址。但是,相反的情况(用注释User)将是有道理的-如果一个地址仅属于一个用户,则删除该用户可以安全地传播对属于该用户的所有地址的删除。

顺便说一句:你可能想向你添加一个mappedBy="addressOwner"属性,User以向持久性提供程序发出信号,表明连接列应位于ADDRESS表中。

2020-03-11