jpa是否在两次调用时打开两个会话?

lf3rwulv  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(320)

对于那些熟悉jpa/hibernate的人,我希望这是一个简单的答案。
因此,如果我在spring中有一个扩展jpa接口的repository接口,并且我连续调用它两次以获取db中的单个条目,它会打开两个会话吗?或者会议对双方都开放?还是第一次将数据加载到内存中,然后再次使用?
我还没有明确启用任何缓存,所以我猜它不会加载到内存中并使用它两次,但我不太熟悉幕后的细节。所有内容都设置为延迟加载,因此不确定这是否会导致会话快速关闭。
只是好奇,谢谢你的回答!

wvyml7n5

wvyml7n51#

因此,如果我在spring中有一个扩展jpa接口的repository接口,并且我连续调用它两次以获取db中的单个条目,它会打开两个会话吗?或者会议对双方都开放?
如果两个调用都是同一事务的一部分,则只使用一个会话(与当前事务上下文关联的会话)。
在没有周围事务的情况下,由于存储库方法在默认情况下是事务性的,因此每个调用都将在一个单独的事务中处理,这意味着两个单独的会话。
还是第一次将数据加载到内存中,然后再次使用?
如果您在同一事务中使用 findById (即。 EntityManager.find() ,第二次将从一级缓存提供服务。
如果您使用查询请求同一个实体,那么第二次查询将执行,但是hibernate将实现该实体,因为检索到的id已经在缓存中找到,因此结果也将从一级缓存中提供。

相关问题