在Spring 4 + Hibernate 4.3.1.final中打开/获取Hibernate会话的最佳实践

时间:2014-02-11 07:58:46

标签: spring hibernate spring-data

在我们的项目中,我们使用Spring和Spring Data(用于服务器端API服务),但有时我们不使用Spring Data查询,而是使用JPA标准。为此,我们使用:

@PersistenceContext
private EntityManager em;
    ...
CriteriaBuilder cb = em.getCriteriaBuilder();
    ...

来自Spring文档:

  

虽然EntityManagerFactory实例是线程安全的,但EntityManager实例却不是。注入的JPA EntityManager的行为类似于从应用程序服务器的JNDI环境获取的EntityManager,如JPA规范所定义。它将所有调用委托给当前的事务性EntityManager,如果有的话;否则,它会回退到每个操作新创建的EntityManager,实际上使其使用线程安全。

所以我们使用的方式似乎应该是当前会话(如果存在),如果不存在则应该创建新会话。我们面临的问题是这种用途的内存泄漏。似乎这种方式打开了很多Hibernate会话,并没有关闭它们。

对于这个问题:使用Hibernate在Spring中使用当前/打开新会话的最佳做法是什么?


注意:HibernateUtil没有其他帖子中建议的getSessionFactory()

谢谢,

阿龙

0 个答案:

没有答案