繁体   English   中英

如何更改 Spring Data JPA/Hibernate 中特定字段的更新行为?

[英]How to change UPDATE behavior in Spring Data JPA/Hibernate for specific field?

我必须在实体字段的UPDATE 验证之前添加。

有一个“状态”枚举字段,它有 3 个值(A、B、C)。

因此,如果实体的值为 C,则无法在 A 或 B 上更新它。

SQL 触发器不允许。

我找到了@SQLUpdate 注释和@Where 注释,但找不到如何使用这些注释。

我尝试使用@EntityListeners,但侦听器在已经更新的参数中具有实体 object,但无法从数据库访问当前值。

public class MyEntityListener {
  
@PreUpdate
  private void validateStatusFieldForUpdate(MyEntity entity) {
    if (!(entity.getStatus().equals(entity.getStatus()))
        && entity.getStatus().equals(MyEntityStatusEnum.C)) {
      throw new ListenerValidationException("Entity with status='C' cannot be updated!");
    }
  }

}

在持久层(实体和存储库)之外进行这些验证是一种很好的做法

您的案例是经典数据验证,您可以使用 static class 中的验证方法解决,例如,从任何服务 class 调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM