我正在使用JBoss 7.1.1和它自帶的Hibernate的默認實現(4.0.1)。 我有一個消息驅動的bean,在同一個事務中創建一個實體並使用實體管理器持久化它。之後(仍然是同一個事務),我找到新創建的實體並嘗試使用實體管理器用PESSIMISTIC_WRITE鎖定它,但是我得到了一個OptimisticLockException。它的根源如下:在同一個事務中創建並找到一個jpa實體?
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [some.package.name.EntityName#aaa1a1a0-d568-11e1-9f99-d5a00a0a12b6]
at org.hibernate.dialect.lock.PessimisticWriteSelectLockingStrategy.lock(PessimisticWriteSelectLockingStrategy.java:95)
at org.hibernate.persister.entity.AbstractEntityPersister.lock(AbstractEntityPersister.java:1785)
at org.hibernate.event.internal.AbstractLockUpgradeEventListener.upgradeLock(AbstractLockUpgradeEventListener.java:99)
at org.hibernate.event.internal.DefaultLockEventListener.onLock(DefaultLockEventListener.java:85)
at org.hibernate.internal.SessionImpl.fireLock(SessionImpl.java:693)
at org.hibernate.internal.SessionImpl.fireLock(SessionImpl.java:686)
at org.hibernate.internal.SessionImpl.access$1100(SessionImpl.java:160)
at org.hibernate.internal.SessionImpl$LockRequestImpl.lock(SessionImpl.java:2164)
at org.hibernate.ejb.AbstractEntityManagerImpl.lock(AbstractEntityManagerImpl.java:1093)
... 202 more
任何想法,爲什麼我不能查找新創建的實體?另外,如何在創建後立即將其設置爲可用?使用EM的合併方法似乎並沒有幫助...
感謝,沖洗並獲得成功:) – 2012-07-24 12:20:23
大:-)你應該嘗試避免刷新與創建/ persist /鎖定 - 如果這樣做會更有效率...... – MattR 2012-07-24 12:27:38
不幸的是,應用程序邏輯將不會允許這 - 我將不得不重構噸的代碼在沒有這樣的問題的情況下寫入了ejb 2.1。沖洗中間交易不好? – 2012-07-25 11:53:05