Java EntityManager和hibernate会话

Java EntityManager和hibernate会话,java,spring,hibernate,session,jpa,Java,Spring,Hibernate,Session,Jpa,我在SpringMVC应用程序中使用HibernateJPA。我正在用这段代码初始化它 @PersistenceContext protected EntityManager entityManager; 现在,这个entityManager将在我的应用程序的整个生命周期中使用。hibernate的实现 EntityManager的管理员正在包装一个hibernate会话。如果你愿意,可以把它打开。当我们使用没有JPA的纯hibernate时。我们开始会议,完成工作,然后结束会议。如果

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

@PersistenceContext
    protected EntityManager entityManager;
现在,这个entityManager将在我的应用程序的整个生命周期中使用。hibernate的实现
EntityManager的管理员正在包装一个hibernate会话。如果你愿意,可以把它打开。当我们使用没有JPA的纯hibernate时。我们开始会议,完成工作,然后结束会议。如果EntityManager在打开和关闭时在幕后使用hibernate会话。若它在应用程序的整个生命周期中都保持一个会话,那个么它不会因为实体并没有被自动逐出而产生问题吗?这可能会导致内存不足错误?

我将根据我的经验和期望尝试回答每个问题,但我非常确定这实际上取决于您是使用JTA事务还是使用UserTransactions a.k.a资源本地事务:

EntityManager在打开和关闭时是否在幕后使用hibernate会话

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

如果它在整个应用程序生命周期内保持单个会话,则不会 由于实体未被自动逐出,是否会产生问题?信息技术 可能导致内存不足错误


它不保留一个hibernate会话。如果您这样配置,它将有一个可重用连接池,但对于每个新创建的bean,它将生成一个新的实体管理器,后面有一个新的Hibernate会话。

请阅读:对于事务,我只使用@Transactional annotation。不做任何其他事情,而且我的应用程序不是很大。spring管理事务时,它只与一个dbSo一起工作。它会在事务完成后关闭会话吗?是的,这是JTA的情况。Resource_Local的情况如何?基本上它适用于更复杂的情况或桌面应用程序。但是:你原来的问题不是这样问的。