簡體   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