产生这个错误的原因比较多,我遇到的问题是缓存的对象不一致导致的。
比方说,第一次从数据库查询出userEneity1,然后set了两个属性,之后还未进行update,就再从数据库查询一次这个对象,这个时候就会导致同一个实体在缓存中的数据不一致,然后就导致了这个错误。
一开始的代码,错误的产生在第三行,第三行的generateOrganizeNo()去缓存中查询了此处被set的organizationEntity,导致了Hibernate执行了update语句,从而导致了错误。
organizationEntity.setOrganizeSuperName(updatedEntity.getOrganizeName());
organizationEntity.setLevel(this.getLevelByParentLevel(updatedEntity.getLevel()));
organizationEntity.setOrganizeNo(this.generateOrganizeNo(organizationEntity));
纠正后的代码,在set之前先进行查询
organizationEntity.setOrganizeNo(this.generateOrganizeNo(organizationEntity));
organizationEntity.setOrganizeSuperName(updatedEntity.getOrganizeName());
organizationEntity.setLevel(this.getLevelByParentLevel(updatedEntity.getLevel()));