簡體   English   中英

保存和引發檢查異常之前如何驗證

[英]How to validate before saving and throw checked exception

我有以下情況:

  • 有一個用戶存儲庫,可以保存/更新用戶
  • 我想在保存/更新之前驗證用戶的名字/姓氏(執行一些字符串操作)
  • 如果執行操作后用戶的名字/姓氏<2個字符,則應拋出已檢查的自定義UnacceptableStringValueException

請注意,許多服務都訪問用戶存儲庫,因此在保存之前直接實現新邏輯很麻煩。

為了在保存/更新之前執行驗證而不必為每個保存/更新調用顯式實現此操作,我試圖使用JPA偵聽器。 使用@PrePersist@PreUpdate我達到了在每次保存/更新之前執行驗證的目標。 但是,此解決方案有兩個問題:

  • 不會在保存/更新用戶的方法上強制執行檢查的異常,並且異常會通過偵聽器自動包裝為RuntimeException
  • 嘗試使用AOP捕獲所說的RuntimeException並解壓縮原始檢查的異常時,我一直在獲取org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only

請注意,在保存/更新用戶之前執行檢查的簡單服務層將無法解決我的用例,因為有一個用戶角色存儲庫也可以保存/更新用戶( @ManyToOne(optional = false, cascade = CascadeType.PERSIST)

解決上面方案中描述的約束的一種好方法是什么?

我通過修復org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only找到了某種可行的解決方案org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only錯誤。

問題是,已檢查的異常導致意外的回滾,為了解決此問題,我將我的自定義已檢查的異常添加到可以像這樣@Transactional(rollbackFor = {UnacceptableStringValueException.class})的異常: @Transactional(rollbackFor = {UnacceptableStringValueException.class})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM