一尘不染

在Swing应用程序中使用Hibernate进行会话管理

hibernate

您如何在Java Desktop Swing应用程序中进行Hibernate会话管理?您是否使用一个会话?多个会议?

以下是有关此主题的一些参考资料:


阅读 224

收藏
2020-06-20

共1个答案

一尘不染

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

如果连接断开,实现透明的会话重新打开也是一个好主意-用户倾向于长时间打开应用程序,即使周末重新启动数据库服务器,它也应星期一继续工作。

更新资料

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

假设我们打开了两个对话框(如Jens的博客示例中所示)。如果用户单击一个单选框,然后我们立即更新与此单选框关联的Hibernate实体,则当用户单击“取消”时,我们会遇到麻烦-
会话已经更新。

如我所见,正确的方法是仅更新对话框变量(非Hibernate对象)。然后,当用户单击“确定”时,我们开始一个事务,合并更新的对象,然后提交该事务。没有垃圾被保存到会话中。

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

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

至于可能的内存泄漏,那么…
Transaction.commit()调用Session.flush()(AFAIK也将其清除缓存)。同样,可以通过调用Session.setCacheMode()来手动控制缓存策略。

2020-06-20