沫沫金::一个小问题引发的大思考

[沫沫金]将开发中遇到的实际问题和解决方案在这里以作总结,希望帮到遇到同类问题的朋友

情景说明:
    情况是这样的,A列表中有一列统计B的size,统计错误。A中有Set<B>集合,使用@JoinTable注解管理关系,B中@ManyToOne关联A,在B的form表单中可以下拉选择A。

问题如下:
    首次新增B后,关系表中会记录当前关系(例如:11 :: 6)再对新增的数据进行编辑,下拉选择ID为12的A。这时候通过A中的Set<B>统计size就会出现ID:11的size是1而ID:12的size也是1的问题,统计错误。真实情况是B只有一条数据,我们只不过是新增了一次和编辑了一次,其实正确的显示应该是Id:11的size=0而Id:12的size=1

原因分析:
    首先要知道,我们正确的数据应该是(Id:11的size=0而Id:12的size=1),所以关键点就在B的编辑操作上了。当B编辑保存的时候Hibernate会自动更新Id:12的数据到关系表而缺少更新掉Id:11的关系数据,所以就导致统计错误。

解决办法:

    在编辑页面添加隐藏A记录的input,这里记录的是编辑之前的A(id:11)。当选择其他A(Id:12)数据提交到后台的时候我们就可以通过隐藏记录的A(id:11)找到编辑之前的A然后执行删除Set<B>的数据,最后执行update更新A就Ok了。

    好了,关键点就是更新编辑之前的A集合数据。只要注意这步操作就能达到自己想要的效果了(Id:11的size=0而Id:12的size=1)

你可能感兴趣的:(Hibernate,关联关系)