2013-02-11 74 views
1

我對交易中的交易和查詢有疑問。 目前我正在使用帶有Hibernate的PostgreSQL 8.4。交易中的查詢

我不知道如果在同一個事務中執行查詢,是否有可能獲取最近插入到事務中的數據 。

例如。

Begin Transaction(); 
     Save(A); 
     Get(A); 
End Transaction(); 

查詢是否返回最近保存的行?

回答

1

是的,它會的。事務上下文使數據對其他數據庫事務不可見,直到此事務處理完成。

如果您使用的是Hibernate,那麼由於會話緩存(緩存)立即執行,save()調用不會將對象寫入數據庫。但連續的get()會將會話緩存刷新到數據庫,然後返回最近創建的對象。

+0

那麼這是奇怪的,因爲我目前正在做一個保存,然後一個Get,但該對象不會返回,除非我做一個刷新,然後get。也許這是hibernate配置的問題,或者我可能需要做其他的事情。 – 2013-02-13 21:50:19

+0

你傳遞給get()的是什麼?你的主鍵是如何設置的?如果它是一個自動遞增或從一個序列中設置,它可能不會在您的對象上設置,直到高速緩存閃存到數據庫。 – Olaf 2013-02-14 18:32:15

0

是的,你會從會話緩存中獲取數據,而不管它是否保存在數據庫中。