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