我有一個應用程序正在通過jpa對各種數據庫表進行一堆寫操作。其中一個寫入可能導致樂觀鎖定異常。如果拋出一個,這不是什麼大問題,我希望事務的其餘部分提交。Jpa事務javax.persistence.RollbackException:標記爲rollbackOnly的事務
我看了看通過對彈簧交易無回退功能:
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<constructor-arg ref="transactionManager"/>
<constructor-arg ref="ignoreOptimisticLockingExceptionRule"/>
</bean>
<bean id="ignoreOptimisticLockingExceptionRule" class="org.springframework.transaction.interceptor.RuleBasedTransactionAttribute">
<property name="rollbackRules">
<list>
<bean class="org.springframework.transaction.interceptor.NoRollbackRuleAttribute">
<constructor-arg value="javax.persistence.OptimisticLockException"/>
</bean>
</list>
</property>
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager"
id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
我的應用程序捕捉周圍的實體的合併方法,將拋出此異常的OLException,但交易仍然得到回滾。我做了一些深入的研究,看看結果如何,並且在JpaTransactionManager的doCommit方法中javax.persistence.RollbackException:標記爲rollbackOnly的事務被拋出。它被拋出是因爲rollbackOnly標誌(在TransactionImpl中)被標記爲true。
深入挖掘,我看到AbstractEntityMangerImpl中的合併方法最終將事務標記爲rollbackonly,然後再觸發異常。儘管我沒有看到RuleBasedTransactionAttributes被應用到哪裏。我不知道我是否正確安裝了該設置。
謝謝!
嗯,這有點令人失望。所以我的選擇基本上是重做一切,因爲我不太關心的輔助表具有更多的最新信息,或將兩者分開。感謝您的信息。我想我有一個替代解決方法(它是批處理邏輯,並有一個陳舊的對象導致問題)。謝謝! – tfecw 2012-07-10 18:39:52