我有很多单独的函数,我必须在每个事务中的transaction.commit()上使用session.clear()来释放内存。
我可能错了,但我认为,默认情况下,在event.commit()中,hibernate中的session.clear()不会被调用。
我想知道是否有任何方法可以配置hibernate在每个transaction.commit()上执行自动会话清除,而不进行session.clear()?
对于上述问题的任何其他解决方案都将受到高度赞赏。
答案 0 :(得分:2)
它被称为每个事务的会话模式:您在开始事务时创建会话,并在提交后关闭它(请注意,清理会话和提交事务几乎是与关闭会话的效果相同,尤其是在使用连接池时。)
如果在独立环境中使用Hibernate,则需要使用hibernate.current_session_context_class = thread
配置contextual sessions。在这种情况下,上下文会话(由getCurrentSession()
获得)将在事务提交时自动关闭。
如果使用EJB或Spring Framework,则可以使用这些框架提供的事务管理工具。他们也支持这种模式。