使用hibernate在不同的应用程序上更新同一个表



我有两个应用程序节点,它们都更新同一个数据库表。但是,更新的列不同。在这里,问题发生了,其次运行的应用程序会更新整行而不是单列。让我们深入探讨问题的解释。

表名是";学生;并且它具有3列。假设ID,第1列,第2列

该行的初始状态是ID=1;abc";,column2=";xyz"有问题的场景步骤低于

  • App-instance-1:读取行并将其保持在持久状态
  • 应用程序实例2:读取行并将其保持在持久状态
  • 应用实例1:将pojo属性column1更新为";ABC";(column1="ABC">,column2="xyz"(
  • 应用实例2:将pojo属性column2更新为";XYZ";(column1="abc",column2="XYZ">(
  • App-instance-1:将pojo合并到db表中,行看起来像ID=1,column1="ABC";,column2=";xyz">
  • 应用实例2:将pojo合并到db表中,行看起来像ID=1,列1=";abc";,column2=";XYZ">

最后,应用程序实例会覆盖彼此的列。我想把最后一行看作column1=";ABC";,column2=";XYZ">。然而,它是column1=";abc";,column2=";XYZ">

我的问题是,为什么App-instance-1更新列2,即使列2没有更改。列2在实例1上不脏。我该如何克服这个问题?

@Entity
@Table("student")
public class Student {
private Long ID;
private String column1;
private String column2;

// Assuming other definations are ok.
}

提前谢谢。

据我所知,你可以尝试这两种方法之一:

  • 使用乐观锁定(例如Hibernate提供的@Version(
  • 创建自定义查询以仅更新一个字段,而不是更新整个实体

相关内容

最新更新