java - Session.getCurrentSession() 是否在不进行任何事务的情况下关闭?
问题描述
我正在尝试通过这样做来加载实体:
public void reloadRepository() {
Session session = getSessionFactory().getCurrentSession();
session.beginTransaction();
Hibernate.initialize(Repository.class);
}
从这个堆栈溢出帖子(Hibernate openSession() vs getCurrentSession()),它说
当您调用 SessionFactory.getCurrentSession 时,如果它不存在,它将创建一个新会话,否则使用当前休眠上下文中的相同会话。它会在事务结束时自动刷新并关闭会话,因此您无需在外部执行此操作。
“交易结束”是什么意思?如果我不进行任何交易(猜测Hibernate.initialize()
不进行交易),休眠会关闭此会话吗?
解决方案
大概。
我猜你设置current_session_context_class
为thread
(因为你正在使用beginTransaction
)。这意味着,根据javadoc,会话仅在事务启动后可用,并在事务结束时自动销毁。
我不确定您所说的“不进行任何交易”是什么意思,您只是使用beginTransaction()
. 一旦提交或回滚,事务将结束。即使您两者都不做,事务最终也会超时,这也算作结束事务。
推荐阅读
- r - 如果我的行本身相同,如何不计算 datediff
- puppet - Hiera - 来自哈希的变量
- git - 如何将 git 子模块代码与主仓库代码一起推送
- java - 我们可以在java中将接口设为静态吗?
- c# - Asp.net core 2.2 响应缓存,无法将 must-revalidate 添加到缓存控制响应标头
- ios - 如何在 Flutter App for iOS 中安装 Spotify SDK
- java - Java DatabaseMetaData getIndexInfo 参数近似值
- linguistics - 理解短语结构树模型
- ios - 如何在 Expo 39 上更新 iOS 版 Facebook SDK?
- php - 比较两个字符串而不考虑php中的空格或字符