我是靠谱客的博主 斯文小熊猫,最近开发中收集的这篇文章主要介绍JPA一对多关系,在一端更新所包含多端引用的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在JPA一对多关系中,如

 

学校类:

 

 

 

学生类:

 

 

 

当我们在程序中更新School时,如:

当前School中有学生1,2,3。我们现在要将学生更新为1,3,4.

即重新set School类中的students集合,然后merge(更新)School对象。

 

但是当你查看数据库时会发现,school表中没有问题,但是student表里有问题了,学生2中关联school的外键为null了。

如果你在建表中约束了该外键不能为空的话,JPA会报sql外键完整性约束异常。

 

该问题在JPA1.0中没有比较好的解决办法,只好用两种比较不太好的办法解决:

1.在数据库中写一个触发器,清理student表中school外键为null的记录。

2.在更新时,先删除,在保存。这种性能是个严重的问题。

 

还好在JPA2.0中该问题有了比较好的解决办法。

在多端加入:orphanremoval=true(孤值删除)配置

public class School{
@Id
private int id;
@OneToMany(mappedby="school",casecade = CasecadeType.ALL, orphanremoval=true)
private Set<Student> students;
........
}
public class Student{
@Id
private int id;
@ManyToOne
private School school;
........
}
其他的什么都不用改变,在School对象中重新set students集合后,merge(更新)School对象。

重新查看数据库,你会发现school表正确,student表中也正确,JPA自动删除了外键为null的记录。完美解决问题。

注意:是JPA2.0中才加入的,只有@OneToOne和@OneToMany可以添加。

最后

以上就是斯文小熊猫为你收集整理的JPA一对多关系,在一端更新所包含多端引用的问题的全部内容,希望文章能够帮你解决JPA一对多关系,在一端更新所包含多端引用的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部