如果我们有会话示例,然后调用session.getTransaction.commit(),那么这个操作会影响第一个休眠缓存吗(比如清除或者更新)?
b4lqfgs41#
这取决于创建Session示例的方式。如果您使用SessionFactory.getCurrentSession(),它将委托给CurrentSessionContext来创建Session。通常使用的实现是ThreadLocalSessionContext,它将在事务提交后自动清除一级缓存。(请参阅此处的docs,该行为由isAutoCloseEnabled()定义,并设置为true)如果使用SessionFactory.openSession()创建Session,是否清除一级缓存取决于hibernate.transaction.auto_close_session属性,默认情况下不会清除它。hibernate.transaction.auto_close_session的含义可以在这里找到,我引用如下:导致会话在事务处理完成后阶段关闭。如果可能,请改用内置的自动会话上下文管理。内置的自动会话上下文管理基本上是指通过SessionFactory.getCurrentSession()创建会话,并配置为使用ThreadLocalSessionContext。
Session
SessionFactory.getCurrentSession()
CurrentSessionContext
ThreadLocalSessionContext
isAutoCloseEnabled()
SessionFactory.openSession()
hibernate.transaction.auto_close_session
1条答案
按热度按时间b4lqfgs41#
这取决于创建
Session
示例的方式。如果您使用
SessionFactory.getCurrentSession()
,它将委托给CurrentSessionContext
来创建Session
。通常使用的实现是ThreadLocalSessionContext
,它将在事务提交后自动清除一级缓存。(请参阅此处的docs,该行为由isAutoCloseEnabled()
定义,并设置为true)如果使用
SessionFactory.openSession()
创建Session
,是否清除一级缓存取决于hibernate.transaction.auto_close_session
属性,默认情况下不会清除它。hibernate.transaction.auto_close_session
的含义可以在这里找到,我引用如下:导致会话在事务处理完成后阶段关闭。如果可能,请改用内置的自动会话上下文管理。
内置的自动会话上下文管理基本上是指通过
SessionFactory.getCurrentSession()
创建会话,并配置为使用ThreadLocalSessionContext
。