前言
在一次web项目中,其场景为员工与部门的关联关系,在员工表生成一个外键对应其部门表的主键,配置的为一对多关联关系,当插入数据时却出现了员工表外键为null的情况。
员工类
基于hibernate注解配置,getter与setter方法不再列出,只列出了其对应字段。
1 |
|
部门类
基于hibernate注解配置,getter与setter方法不再列出,只列出了其对应字段
1 |
|
原Test测试类
1 | SessionFactory sessionFactory = SessionFacUtil.getsessionFactory();//加载配置 |
运行测试无异常,查看数据库也正常插入了数据
数据库显示为:
可见以正常插入,并与产生了外键,可当再次运行测试类,再次插入时出现了问题,新运行的插入的插入成功了,可第一次插入的数据外键却变成了null,也就是说,只能存在这一个外键,不能有两个。
如图:
这就让我感到很是疑惑,一对多,由表可知,一个部门下可以有多个部门的,不应该会出现这种null的情况的,一开始以为配置的问题,检查了好多配置地方,也在网上搜寻了一大圈,最后还是无果。
正当我一筹莫展的时候,突然发现了一句关键的话
Set<P_user> sets = new HashSet<P_user>();
没错,就是它,我怀疑是不是这个set集合的问题,每次运行new后都产生新的集合,然后再把集合加入dept中,再执行数据插入,会不会是这个的影响,于是改造了以下新的测试类
新Test测试类
1 | SessionFactory sessionFactory = SessionFacUtil.getsessionFactory();//加载配置 |
测试结果完美通过
数据库截图:
结言
就是这个每次new的set集合问题,结果执行时有让数据库update的了以下,把第一次插入的数据变为了null。
一次小小的细节问题,也体现出看来我对hibernate了解学习的还不够透彻,还需努力专研。