簡體   English   中英

Spring JPA - 實體分離? 關於例外?

[英]Spring JPA - entity detached? on exceptions?

我不確定我是否正確,但我有一個交易方法,並在其中我獲取一個項目列表。 現在,在處理其中一個項目時,我遇到了一個無效的數據使用異常[null被傳遞到一個存儲庫,而罰款就拋出了這個異常,這很好],並且在得到該異常后,我抓住它,並標記該項目正在處理'失敗'。 事務方法結束但更改不會通過。

@Transactional
public void method(){    
  try{
    List items = itemRepo.getItems(NOT_SUBMITTED);
    for(Item item: items){
      processItem(item); //this is where the exception happens
    }
  }
  catch(Exception e){
    item.setStatus(FAILED) // this doesn't go through to the db
  }
}

private void processItem(Item item){
  otherRepo.findOne(item.X); //item.X is null, and I get "invalid data usage" exception
}

我認為這個物體在某種程度上是分離的; 不知道為什么。 我做了一個測試,我自己在try塊中拋出異常,工作得很好。 狀態得到了恰當的反映。

我嘗試再次抓取這個對象,執行itemRepo.findOne(item).setState(FAILED),沒有用。 我試過,itemRepo.save(item) - 沒用。

有什么指針嗎?

謝謝

JPA實現拋出異常,該實現還將事務狀態設置為setRollbackOnly。 這就是為什么你可以在拋出異常時保存失敗的狀態。

一旦JPA entityManager拋出異常就完成了,你就不能再使用那個entityManager了。 將項狀態保存為失敗必須使用不同的entityManager實例位於單獨的事務中。

暫無
暫無

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

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