我有以下实体:
@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
中,也会有不同的保存方式。