声明BZ只是一个新手,针对个人解决的问题。欢迎各位高手指正。
最近项目中遇到这个问题在hibernate执行save方法时由于在设置实体的外键使用了CascadeType.ALL,导致保存失败(BZ的本意是不用保存关联实体,所以关联实体为NULL),发现后台同时打印insert语句和update语句,
开始以为先插入后又自动更新了实体很困惑,googlel了很多的资料都没有得到答案,调试的时候发现在提交事务的时候就打印了update语句(我估计它是在提交的时候检查脏数据),最终在这个主题update while doing save in hibernate 发现了这么一句话All of this(insert and update) could have been done in single operation(insert), instead of first doing insert and then update. What is the advantage of performing 2 operations. ,说明这是Hibernate的内置机制,并没有错,就是让人有点难以理解,本人的理解是它在事务提交的时候需要进行脏数据检查,还有一点如果实体保存的时候还有关联实体的保存的时候也会出现这种情况,需要设置inverse="true"属性。