单个会话。当您需要执行一组操作时(例如,在对话框确定按钮后更新数据),开始事务,最后提交tx。虽然连接不断打开(因为它是同一会话),因此Hib和RDBMS都可以使用所有缓存机会。
在连接失效的情况下实现透明会话重新打开也许是个好主意 - 用户倾向于让应用程序长时间打开,即使数据库服务器在星期一应该也会继续工作周末重新启动。
更新
延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()来手动控制缓存策略。
好点,简斯! – 2008-11-10 15:49:22