如何正确更新@Version字段的实体?

时间:2018-05-16 12:17:49

标签: java spring-boot jpa spring-data-jpa

我有以下实体:

@Entity
public class Tenant {
    private Long id;
    private String name;
    @Version
    private Instant version = Instant.now()
}

并希望这段代码(目标是使用DTO中的值更新实体 - DTO的字段为1:1与实体)失败并带有乐观锁定异常:

Option<Tenant> updateTenant(Long id, UpdateTenantDTO dto) {
   return repository
      .findById(dto.getId())
      .map(tenant -> {
          tenant.setVersion(dto.getVersion());

          if (isNotEmpty(dto.getName())) {
             tenant.setName(dto.getName());
          }
          return tenant;
       })
       .map(repository::save);
 }

不幸的是,异常永远不会发生,并且在DTO中设置了无效版本。如何以可靠的方式更新实体?我没有定义任何交易。不知何故,当save被调用时,它会设置新的version,即使在数据库version中,也会有不同的保存方式。

0 个答案:

没有答案