Hibernate 冬眠不';不要坚持一个一个的修改

Hibernate 冬眠不';不要坚持一个一个的修改,hibernate,jpa,Hibernate,Jpa,以下是与该bug相关的简化代码: @Entity @Table(name = "ms_filter", uniqueConstraints=@UniqueConstraint(columnNames = { "ms_id" })) public class MSFilter @OneToOne private MS ms; 您可以看到,ms_uID上存在约束 将创建此类的新实例。ms字段设置为sqlId(主键)等于“1649809”的值(ms),此字段

以下是与该bug相关的简化代码:

@Entity
@Table(name = "ms_filter", uniqueConstraints=@UniqueConstraint(columnNames = { "ms_id" }))
public class MSFilter

@OneToOne
private MS ms;
您可以看到,ms_uID上存在约束

将创建此类的新实例。ms字段设置为sqlId(主键)等于“1649809”的值(ms),此字段映射到ms_id。此时已有另一个MSFilter指向同一ms,两个实例已提交很长时间

然后,我将字段ms的值更改为sqlId等于1618544的另一个ms(此会话中的一个新ms)。这是通过反射完成的,调用setter方法

然后调用提交。但是我可以看到Hibernate试图保存新实体,但是使用了MS的旧值。这里是我在提交之前添加的日志。将列出会话的所有MSFilters实例(我已将日志放在构造函数中以检查这一点)

参考:[1]ms_id 1649627筛选器_id 1657507唯一_密钥-2011976030:-1667727498:3:6用户_id null用户_配置文件null id 1657509

参考:[2]ms_id 1649809筛选器_id 1657507唯一_密钥13321113:-1720593839:2:3076用户_id null用户_配置文件null id 1659533

当前:[3]ms_id 1618362筛选器_id 1626084唯一_密钥1196133270:-1667727498:3:6用户_id null用户_配置文件null id 1628109

当前:[4]ms_id 1619159筛选器_id 1626084唯一_密钥1196133270:-1667727498:1:2用户_id null用户_配置文件null id 1628108

当前:[5]ms_id 1618544筛选器_id 1626084唯一_密钥1196133270:空用户_id空用户_配置文件空id 1659620

我确实激活了Hibernate日志,下面是第一条也是唯一一条SQL语句:

2015-04-01 01:55:53调试SQL:109-插入ms_筛选器(ms_id、筛选器id、唯一密钥、用户id、用户配置文件、id)值(?,,,,,,?)

2015-04-01 01:55:53 TRACE BasicBinder:81-绑定参数[1]为[INTEGER]-[1649809]

2015-04-01 01:55:53 TRACE BasicBinder:81-绑定参数[2]为[INTEGER]-[1626084]

2015-04-01 01:55:53跟踪基本索引:81-绑定参数[3]为[VARCHAR]-[1196133270:null]

2015-04-01 01:55:53跟踪基本索引:69-绑定参数[4]为[VARCHAR]-[null]

2015-04-01 01:55:53跟踪基本索引:69-绑定参数[5]为[VARCHAR]-[null]

2015-04-01 01:55:53 TRACE BasicBinder:81-绑定参数[6]为[INTEGER]-[1659620]

如您所见,Hibernate尝试插入实例[5 ](如果我考虑“ID”列)。但是“ms_id”的值不是很好吗?当然,惟一约束没有得到尊重,事务失败


什么原因会导致这种情况?

可能重复感谢您的回答,但我的问题不同,我没有双向关联。最后我找到了我问题的原因,解释如下: