我对交易中的交易和查询有疑问。 目前我正在使用带有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