我對交易中的交易和查詢有疑問。 目前我正在使用帶有Hibernate的PostgreSQL 8.4。交易中的查詢
我不知道如果在同一個事務中執行查詢,是否有可能獲取最近插入到事務中的數據 。
例如。
Begin Transaction();
Save(A);
Get(A);
End Transaction();
查詢是否返回最近保存的行?
我對交易中的交易和查詢有疑問。 目前我正在使用帶有Hibernate的PostgreSQL 8.4。交易中的查詢
我不知道如果在同一個事務中執行查詢,是否有可能獲取最近插入到事務中的數據 。
例如。
Begin Transaction();
Save(A);
Get(A);
End Transaction();
查詢是否返回最近保存的行?
是的,它會的。事務上下文使數據對其他數據庫事務不可見,直到此事務處理完成。
如果您使用的是Hibernate,那麼由於會話緩存(緩存)立即執行,save()調用不會將對象寫入數據庫。但連續的get()會將會話緩存刷新到數據庫,然後返回最近創建的對象。
是的,你會從會話緩存中獲取數據,而不管它是否保存在數據庫中。
那麼這是奇怪的,因爲我目前正在做一個保存,然後一個Get,但該對象不會返回,除非我做一個刷新,然後get。也許這是hibernate配置的問題,或者我可能需要做其他的事情。 – 2013-02-13 21:50:19
你傳遞給get()的是什麼?你的主鍵是如何設置的?如果它是一個自動遞增或從一個序列中設置,它可能不會在您的對象上設置,直到高速緩存閃存到數據庫。 – Olaf 2013-02-14 18:32:15