1

版本:1.1.2.RELEASE

我有以下简单的测试代码

    JobTask task1 = new JobTask(null, "task1", "sync files", JobStatus.RUNNING);
    JobTask savedTask = jobTaskReponsitory.save(task1);
    savedTask.setTaskDesc("update descript.");
    jobTaskReponsitory.save(savedTask);

JobTask 聚合根包含@Id @Version @CreatedDate @CreatedBy @LastModifiedBy @LastModifiedDate注释。

  1. 为什么InsertRoot操作总是触发?在第二个save()操作中,实体已经有了IDValue,我明白此时update()应该触发该操作。
  2. 是否有关于 的文档@Version?我没有找到任何官方的东西。
4

1 回答 1

0

你的第一个问题的答案在于第二个问题。

@VersionSpring Data JDBC 尚不支持乐观锁定/该属性。这就是为什么没有关于它的官方文档的原因。虽然有一个 PR 请求

这也意味着版本属性将保持不变null0取决于其类型。但将检查以确定实体是否被视为新实体:如果 ID 为null0或如果有一个属性用@Versionisnull或注释的属性,则该实体被认为是新的0

由于第二个条件始终true存在于您的情况下,因此 Spring Data JDBC 将始终执行insert.

为了解决这种情况,我建议现在删除版本属性或至少是@Version注释,因为它可能没有价值,因为无论如何都没有实现乐观锁定。

于 2019-11-27T10:16:20.230 回答