java - Hibernate 保存或更新覆盖旧数据

标签 java hibernate hibernate-mapping

我正在执行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/

相关文章:

java - Eclipse 找不到/加载主类

javax.persistence.OptimisticLockException + org.hibernate.StaleObjectStateException 异常

java - 我的 hibernate 映射文件未通过验证测试,当我尝试运行该程序时出现异常。这是为什么?

java - 如何在没有类的情况下使用 Hibernate 复合标识?

java - 从 hibernate.cfg.xml 创建 SessionFactory 对象时出错

java - 通过与数据库中的用户详细信息进行比较来进行用户登录

java - 正则表达式中的负向前瞻匹配所有接受特定字符的内容

java - spring文件夹内容资源注入(inject)到bean中

java - 使用 criteria.list() 来确定返回的行数是否有效?

mysql - Hibernate 将 java int 转换为 mysql 整数