我目前正在开发一个使用Spring Boot和Spring Data(特别是它的JpaRepository
接口)以及Hibernate的应用程序。
我喜欢Hibernate的缓存功能,当您提交多个查询与特定对象匹配时,您将在每次查询执行中返回该对象的同一实例(关于Java的==运算符)。然而,在使用Spring Data和JpaRepository
类时,这似乎并不总是如此。出于这个原因,我认为这里有多个HibernateSession
实例在工作。
我的问题是:Spring Data如何处理Hibernate会话?它何时打开或关闭它们?是否有一种方法可以配置它在整个应用程序的运行时期使用相同的会话,以充分利用Hibernate的对象缓存?是否有理由不这样做?
谢谢,
Alan
@Transactional
注释的服务方法(并且已经正确设置了tx支持),Spring将打开一个Session
/EntityManager
并在该事务中重复使用它以进行所有数据库调用。还应注意,您的服务层应该是事务层,而不是数据访问层。 - M. Deinum@Transactional
注释服务方法的区别。 - Andrew Spencer@Transactional
方法时创建,但将使用现有的EntityManager。 - Andrew Spencer