Hibernate并没有坚持OneToOne修改

时间:2015-04-01 00:36:38

标签: hibernate jpa

以下是与错误相关的简化代码:

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

@OneToOne
private MS ms;

您可以看到ms_id存在约束。

创建此类的新实例。 ms字段设置为值(MS),其中sqlId(它的主键)等于" 1649809",此字段映射到ms_id。此时已经有另一个MSFilter指向同一个MS,这两个实例都已经提交了很长时间。

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

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

  

ref:[1] ms_id 1649627 filter_id 1657507 unique_key -2011976030:-1667727498:3:6 user_id null user_profile null id 1657509

     

ref:[2] ms_id 1649809 filter_id 1657507 unique_key 13321113:-1720593839:2:3076 user_id null user_profile null id 1659533

     

当前:[3] ms_id 1618362 filter_id 1626084 unique_key 1196133270:-1667727498:3:6 user_id null user_profile null id 1628109

     

当前:[4] ms_id 1619159 filter_id 1626084 unique_key 1196133270:-1667727498:1:2 user_id null user_profile null id 1628108

     

当前:[5] ms_id 1618544 filter_id 1626084 unique_key 1196133270:null user_id null user_profile null id 1659620

我确实激活了Hibernate日志,这是第一个也是唯一一个SQL语句:

  

2015-04-01 01:55:53 DEBUG SQL:109 - 插入ms_filter(ms_id,filter_id,unique_key,user_id,user_profile,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 TRACE BasicBinder:81 - 将参数[3]绑定为[VARCHAR] - [1196133270:null]

     

2015-04-01 01:55:53 TRACE BasicBinder:69 - 绑定参数[4]为[VARCHAR] - [null]

     

2015-04-01 01:55:53 TRACE BasicBinder:69 - 绑定参数[5]为[VARCHAR] - [null]

     

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

正如您所见,Hibernate尝试插入实例[5](如果我考虑" id"列)。但" ms_id"的价值不是好人吗?当然,独特的约束不受尊重,交易失败。

是什么导致这种情况?

0 个答案:

没有答案
相关问题