EntityManager和hibernate Session

时间:2014-09-19 13:20:42

标签: java spring hibernate session jpa

我在SpringMVC应用程序中使用hibernate JPA。我用这段代码初始化它

@PersistenceContext
    protected EntityManager entityManager;

现在这个entityManager将在我的应用程序的整个生命周期中存活。 hibernate的实现 EntityManager正在包装一个休眠会话。如果你愿意,你可以打开它。当我们在没有JPA的情况下使用纯hibernate时。我们打开会话做我们的工作并关闭会话。如果EntityManager在打开时和关闭时在幕后使用hibernate会话。如果它在应用程序的整个生命周期中保持单个会话,那么它不会产生问题,因为实体不会被自动驱逐吗?它可能导致内存不足错误?

1 个答案:

答案 0 :(得分:0)

我会尝试回答每个问题(根据我的经验和期望),但我很确定这取决于您是使用JTA交易还是使用UserTransactions(a.k.a资源本地交易):

  

如果EntityManager在打开时和关闭时在后台使用hibernate的会话?

对于EntityManager的每个实例,都会打开一个新的hibernate会话。如果使用JTA事务,则在事务关闭时(第一个服务bean方法返回时),entityManager将关闭。

  

如果它在整个生命周期中保持单个会话不会   它会产生问题,因为实体不会被自动驱逐?它   可能导致内存不足错误?

它没有保持单个休眠会话。如果你配置了它,它将有一个可重用连接池,但对于每个新创建的bean,它将生成一个新的实体管理器,后面有一个新的Hibernate会话。