中华网数码

设为书签Ctrl+D将本页面保存为书签,全面了解最新资讯,方便快捷。
业 界/ 互联网/ 行 业/ 通 信/ 数 码/ 手 机/ 平 板/ 笔记本/ 相 机
当前位置: 数码 > 滚动新闻 >

如何理解关于jpa中orphanRemoval=true?

如何理解关于jpa中orphanRemoval=true?
2020-11-13 14:53:44 来源: 互联网

网友一:按照官方给出的字面意思是:如果删除关系,是否删除关系上的实体,true表示会删除,false表示不删除。我们来举个例子说明一下,现在分别有User和Address两个实体,User类上有一个addresses的字段,表示引用多个Address实例,User和Address是一对多关系。大致的代码如下:

public class User{

@OneToMany(orphanRemoval = true)

private Set

addresses;

//...

}

public class Address{

//...

}

我们操作User实体,并删除一个address实例。

User user = em.find(User.class,1L);

Address address = em.find(Address.class,1L);

user.getAddresses().remove(address);

em.save(user);

如果orphanRemoval = true,那么这个操作会删除address对象,如果为false,则会删除他们的关系,将address对user的引用设置为null。

不过我自己做过相应的测试,发现无论如何设置,它并不会生效。

网友二:测试一下网友一的看法,首先用单向一对多关系测试。没有设置 CascadeType.all 或者 remove,否则只会更新关联字段为null。

//单向一对多,user里有addresses

public class User{

//@OneToMany(orphanRemoval = true)//此时移除user里的某一个address会级联更新该userId字段为null

//@OneToMany(orphanRemoval = false)//此时移除user里的某一个address会级联更新该userId字段为null

//@OneToMany(cascade=CascadeType.ALL,orphanRemoval = true)//此时移除user里某一个address会级联删除该address

//@OneToMany(cascade=CascadeType.ALL,orphanRemoval = false)//此时移除user里的某一个address会级联更新该userId字段为null

@JoinColumn(name="userId")

private Set

addresses;

//...

}

//address里没有user

public class Address{

//...

}

再来测试双向一对多的关系。

//双向一对多的一端,user里有addresses

public class User{

//@OneToMany(orphanRemoval = true,mappedBy="user",)//此时移除user里的某一个address无任何效果

//@OneToMany(orphanRemoval = false,mappedBy="user",)//此时移除user里的某一个address无任何效果

//@OneToMany(cascade=CascadeType.ALL,orphanRemoval = true,mappedBy="user",)//此时移除user里的某一个address会级联删除该address

//@OneToMany(cascade=CascadeType.ALL,orphanRemoval = false,mappedBy="user",)//此时移除user里的某一个address无任何效果

//注解mappedBy表示自己不维护关系,由Address来维护关系

private Set

addresses;

//...

}

//双向一对多的多端,address里有user

public class Address{

@ManyToOne

@JoinColumn(name="userId")

private User user;

//...

}

在双向关联关系里,让一端维护关系所以设置失效了???但是设置cascade=CascadeType.ALL,orphanRemoval=true之后又可以删除。这点还得研究一下

责任编辑:kj005

文章投诉热线:156 0057 2229 投诉邮箱:29132 36@qq.com
关键词:

西南某省5G覆盖率达99% 下载平均速率达800Mbps

2020-11-13 09:53:13西南某省5G覆盖率达99% 下载平均速率达800Mbps

三星拿下三季度北美市场手机出货份额第一,击败苹果

2020-11-11 10:41:53三星拿下三季度北美市场手机出货份额第一,击败苹果

华硕ROG C8DH主板斩获15项全球第一

2020-11-10 10:20:07华硕ROG C8DH主板斩获15项全球第一

数据分析:28nm产业链1-2年内或将实现国产化

2020-11-10 10:15:43数据分析:28nm产业链1-2年内或将实现国产化

ASML中国展示DUV光刻机 可生产7nm及以上制程芯片

2020-11-06 09:24:42ASML中国展示DUV光刻机 可生产7nm及以上制程芯片

中国联通累计开通5G基站33.2万站,年底预计超过38万个

2020-11-03 15:20:15中国联通累计开通5G基站33.2万站,年底预计超过38万个

相关新闻