【发布时间】:2021-06-02 18:49:04
【问题描述】:
我有 2 个应用程序节点,它们都更新同一个数据库表。但是,更新的列是不同的。在这里出现问题,其次运行应用程序更新整行而不是单列。让我们深入研究问题解释。
表名为“student”,有 3 列。假设ID,column1,column2
行的初始状态是 ID=1, column1="abc", column2="xyz" 有问题的场景步骤如下
- App-instance-1 :读取行并将其保持在持久状态。
- App-instance-2 :读取行并将其保持在持久状态。
- App-instance-1 :将 pojo 属性 column1 更新为“ABC”(column1="ABC", column2="xyz")。
- App-instance-2 :将 pojo 属性 column2 更新为“XYZ”(column1="abc",column2="XYZ")。
- App-instance-1 :将 pojo 合并到 db 表中,行看起来像 ID=1,column1="ABC",column2="xyz"
- App-instance-2 :将 pojo 合并到 db 表中,行看起来像 ID=1,column1="abc",column2="XYZ"
最后,应用实例会覆盖彼此的列。 我希望看到最后一行是 column1="ABC", column2="XYZ"。但是,它是 column1="abc", column2="XYZ"。
我的问题是,为什么 App-instance-1 会更新 column2,即使 column2 没有更改。 column2 在 instance-1 上不脏。我该如何克服这个问题?
@Entity
@Table("student")
public class Student {
private Long ID;
private String column1;
private String column2;
// Assuming other definations are ok.
}
提前致谢。
【问题讨论】: