java - 在 Swing 应用程序中使用 Hibernate 进行 session 管理

标签 java database hibernate swing session

您如何在 Java Desktop Swing 应用程序中进行 Hibernate session 管理?您使用单个 session 吗?多个 session ?

这里有一些关于这个主题的引用:

最佳答案

单个 session 。当您需要执行一组操作时开始事务(例如在对话框确定按钮后更新数据),最后提交 tx。尽管连接一直处于打开状态(因为它是同一个 session ),因此 Hib 和 RDBMS 都可以使用所有缓存机会。

在连接中断的情况下实现透明的 session 重新打开可能也是一个好主意——用户倾向于让应用程序长时间保持打开状态,即使数据库服务器已关闭,它也应该在周一继续工作周末重启。

更新

Jens Schauder 提供了使用多个 session 的原因:对 session 进行部分(不需要的)更新。好吧,这取决于您使用 Hibernate 的方式。

假设我们打开了两个对话框(如 Jens 的博客示例中所示)。如果用户单击单选框,我们立即更新与该单选框关联的 Hibernate 实体,那么,当用户单击取消时,我们就有麻烦了—— session 已经更新。

在我看来,正确的方法是只更新对话框变量(非 Hibernate 对象)。然后,当用户点击确定时,我们开始一个事务,合并更新的对象,提交事务。没有垃圾会被保存到 session 中。

MyHibernateUtils.begin();
Settings settings = DaoSettings.load();
// update setttings here
DaoSettings.save(settings);
MyHibernateUtils.commit(); 

如果我们实现如此清晰的关注点分离,我们稍后可以通过简单更改 MyHibernateUtils.begin() 实现来切换到多个 session 。

至于可能的内存泄漏,好吧... Transaction.commit() 调用 Session.flush(),AFAIK 也会清除缓存。此外,可以通过调用 Session.setCacheMode() 手动控制缓存策略。

关于java - 在 Swing 应用程序中使用 Hibernate 进行 session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/268651/

相关文章:

java - 渲染脚本生成方法 : cannot find symbol method getPointSize()

java - Android 检查互联网连接超时

mysql - 比较不同的行并得出结果

sql - App=EntityFramework 在Sql 连接字符串中做了什么?

sql - 在 Grails SQL 查询结果中包含列名

java - 网络字节顺序-电报

java - 检查 java 代码是否正在运行,如果没有运行则尝试重新启动 (unix)

php - PDO 创建数据库和表

java - hibernate 到 POJO 生成器

java - 我想要获得一周的值(value)