我正在执行saveOrUpdate
,但我面临的问题是它覆盖了表中已有的旧数据。
我有一个表,其中有一个correlationID作为键,并且针对该id,我首先保留一些数据,然后再次针对相同的id,稍后在同一个表的另一列中传递确认消息。但这会覆盖表中的旧数据,我得到的是一个带有 id 和消息的空表,其他列已无效。
我正在使用 Hibernate 映射文件 (.hbm.xml)
关于如何保留旧数据并仅更新一列的建议?
更新:
我在尝试加载持久性实例时收到此消息:
SEVERE: IllegalArgumentException in class: common.entity.AbstractDetailsKey, getter method of property: correlationId
...
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of common.entity.AbstractDetailsKey.correlationId
...
Caused by: java.lang.IllegalArgumentException: 666
最佳答案
您是否在更新和保存之前先加载实体?或者您只是创建一个实体实例,在其中添加您想要的 id,然后更改空实例上的一个属性?这会很糟糕,因为您刚刚告诉 ORM id 为 X 的实体现在只有一个带有值的属性,因此它当然会将所有其他列的值清空。
听起来你需要这样做
1) 加载行,然后进行修改,然后保存或更新
2)使用hql只更新一列。
关于java - Hibernate 保存或更新覆盖旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784966/