JPA一对多关系,在一端更新所包含多端引用的问题
来源:互联网 发布:英语造句软件 编辑:程序博客网 时间:2024/04/30 11:54
在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一对多关系,在一端更新所包含多端引用的问题
- 在一对多关系中为什么要让多的一端维护关联关系
- mybaits xml 一对多 多端的关联一端 association 的用法。
- 一对多排序的问题(多端是引用类型的数据)
- JPA一对多关系
- 使用JPA的建立一对多关系
- JPA中的一对多关系
- 一对多 如何使多的一端信息在页面上同一行中友好显示
- JPA一对多级联更新遇到的问题
- JPA一对多实现插入的问题
- JPA的一对多
- JPA的双向一对多和双向一对一关联关系
- JPA学习笔记-映射单向一对多的关联关系
- JPA学习笔记-映射双向一对多的关联关系
- sql一对多拼接多的一端字符
- JPA:一对多、多对一关系
- JPA映射关联关系-单向一对多
- JPA映射关联关系-双向一对多
- java访问权限修饰符
- 在Visual C++中如何利用UDL文件来建立ADO连接
- ubuntu 10 安装matlab
- 归并排序
- 折磨人的EL表达式
- JPA一对多关系,在一端更新所包含多端引用的问题
- java Spring Security 总结一 5
- 邮件安全技术
- 回过头来看Silverlight之一
- java Spring Security 总结一 6
- 太高兴了。。找到了《电机及拖动基础》第四版,下册的答案了。。给大家分享一下。。
- VS开发常用技巧
- 2010.07.11
- 有时间可以看看复习一下的oracle(转)