簡體   English   中英

如何在 JPA 中捕獲 OptimisticLockException

[英]How to catch OptimisticLockException in JPA

我在這里讀了幾個關於在無狀態會話 bean 中使用的 JPA 的OptimisticLockException的問題。 它被拋出,但顯然不是我期望的地方。

這是我希望獲得異常的代碼:

            try
            {
                productFacade.edit(product);
            }
            catch(Exception {
                return "lock";
            }

productFacade是用 NetBeans 生成的,它是一個帶有本地接口的 EJB,它實現了一個AbstractFacade抽象類。 據我所知,這與 JPA 中的事務有關。 因為異常是在這個代碼片段所在的方法被離開之后拋出的,而不是在調用edit()之后。 我應該在哪里處理異常?

另外,我以后需要事務機制,因為我需要更新多個產品(如果某些產品被鎖定,則不需要更新)。 我找到了一些代碼示例,但這讓我想知道我應該如何處理交易?

在事務提交之前,不會引發鎖定錯誤。 因此,您需要在SessionBean之外處理它,或使用容器管理的事務。

或者,您可以僅在JPA EntityManager上調用flush(),然后將引發錯誤。

使用保存和閃存並捕獲Exception

try {
  log.info("save data versions: " + employee.getVersion());
  someRepository.saveAndFlush(employee);
} catch (Exception ex) {
  log.info("catch Exception");
  throw new OptimisticLockException("retry data Exception");
}

如果想使用重試可以添加帶有一些標記的@Retryable

暫無
暫無

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

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