Java 在Swing应用程序中使用Hibernate进行会话管理
如何在Java桌面Swing应用程序中进行Hibernate会话管理?您使用单一会话吗?多个会话 以下是有关该主题的一些参考资料:Java 在Swing应用程序中使用Hibernate进行会话管理,java,database,hibernate,swing,session,Java,Database,Hibernate,Swing,Session,如何在Java桌面Swing应用程序中进行Hibernate会话管理?您使用单一会话吗?多个会话 以下是有关该主题的一些参考资料: 单个会话。当您需要执行一组操作(如对话框“确定”按钮后更新数据)时,启动事务,最后提交发送。尽管连接一直是开放的(因为它是同一个会话),因此Hib和RDBMS都可以使用所有缓存机会 在连接断开的情况下,实现透明的会话重新打开也是一个好主意——用户倾向于让应用程序长时间保持打开状态,即使DB服务器在周末重新启动,它也应该在周一继续工作 更新 Jens Scha
MyHibernateUtils.begin();
Settings settings = DaoSettings.load();
// update setttings here
DaoSettings.save(settings);
MyHibernateUtils.commit();
如果我们实现了这样一个清晰的关注点分离,我们可以稍后通过简单的MyHibernateUtils.begin()实现更改切换到多个会话
至于可能的内存泄漏,那么。。。Transaction.commit()调用Session.flush(),后者也会清理缓存。此外,可以通过调用Session.setCacheMode()手动控制缓存策略。不要使用单个会话。对于除最小的应用程序以外的所有应用程序,它都会增长,收集过时的数据,并且变得越来越慢,因为脏检查需要检查会话中的每个实体 如果您不需要/不希望通过Hibernate延迟加载和跟踪更改,那么可以使用短期会话 但如果您想从Hibernate的强大功能中获益,请使用我在博客中描述的方法: 或德语版本: AFAIK这实际上与中描述的方法相同,但建议如何实际确定会话范围: 在每帧会话上,使用父帧会话的模态帧除外 只需确保永远不要组合来自不同会话的对象。这会引起很多麻烦 作为对弗拉基米尔最新情况的答复:
- 取消实际上对我的方法非常有效:扔掉会话
- session.flush无法解决在使用应用程序的单个会话时evergrowing会话的问题。当然,使用这种方法,您可以描述您可以使用短期会话,这应该可以正常工作。但是
- 你会损失很多:延迟加载只适用于附加对象,自动检测脏对象。如果使用分离的对象(或根本不是实体的对象),则必须自己执行此操作