2013-02-11 47 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

是的,你会从会话缓存中获取数据,而不管它是否保存在数据库中。