您如何在 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/