2013-04-10 64 views
0

我有一個事務獲取一些數據,插入一些數據並在一個表上進行更新。此更新的表正在導致一些Oracle鎖定,所以我想從此事務中取出更新並在我的過程結束時啓動一個新事務來執行更新。如何從稍後完成的事務中取出更新?

所以目前我得到的更新後的表中加入,後來才知道,在對象更新一些數據,然後在交易結束時,Hibernate並它的神奇和更新表。我想改變這種情況,我想,在事務開始時獲取數據,分離對象,更新對象中的數據,然後在新事務中執行merge()。可能?我不知道如何分離它作爲HibernateTemplate沒有detach()方法。

不知道這事,但我有一個一對一的關聯:

<one-to-one name="itmInstSum" class="dds.tmatic.domain.ItmInstSum" fetch="join" /> 

任何想法?我不理解分離嗎?我相信驅逐()從緩存或東西刪除它,這不是我想做的事......

回答

1

第一:在commit()方法休眠重新排列,有時會產生不想要的結果的數據庫語句的順序。用Session.flush()你可以影響這種行爲。 Hibernate只在兩個flush()語句(commit()隱式調用flush())之間重新排列語句。

第二:休眠不具有分離,但它具有Session.evict()方法,該方法的對象出休眠的控制。如果您想再次將其置於Hibernate的控制之下併合並它,則必須再次從數據庫加載該對象,並將其合併爲手動複製修改後的屬性。

+0

謝謝!我試過這個,它的工作原理。所以我逐出了對象,然後當事務結束時,我開始一個新的併合並()它。完善! – markthegrea 2013-04-12 18:12:49

相關問題