当前位置: 首页 > 面试题库 >

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

山阳辉
2023-03-14
问题内容

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

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

  • http://www.hibernate.org/333.html
  • http://blog.schauderhaft.de/2008/09/28/hibernate-sessions-in-two-tier-rich-client-applications/
  • http://in.relation.to/Bloggers/HibernateAndSwingDemoApp

问题答案:

单节。当您需要执行一组操作(例如,在对话框的“确定”按钮后更新数据)时启动事务,最后提交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()来手动控制缓存策略。



 类似资料:
  • 问题内容: 我目前正在开发我的一个(相当大的)宠物项目,这是一个Swing应用程序,它本质上需要多线程。几乎所有用户交互都可能通过Internet从某些远程服务器获取数据,因为我既不能控制这些服务器,也不能控制Internet本身,因此不可避免的是需要较长的响应时间。EDT忙时,Swing UI显然无法重绘自身,因此所有远程服务器调用都需要由后台线程执行。 我的问题: 后台线程获取的数据被本地(内

  • 我在GWT应用程序中使用hibernate,其中我有一个单独的客户机/服务/业务/dao层。 服务/业务层使用dao层获取/更新用于请求处理的模型。问题是,我遵循DOA类方法中打开/关闭hibernate会话的反模式。 一般的Hibernate指南似乎建议,我们应该有一个请求范围的会话。这可以在几个地方完成,比如servlet过滤器或服务层。我们可以打开会话并将其注入到DAO层,并在完成请求之前在

  • 问题内容: 我正在创建一个连接到Web服务器的Swing应用程序,并运行一些servlet(由我自己创建)。用户第一次连接时,会获得一个“ playerID”,该“ playerID”将保存在他的servlet会话中。当我尝试从Swing应用程序再次调用servlet时,似乎无法识别“ PlyaerID”。我正在拨打一个简单的电话以获得PlayerID。Servlet识别这种类型的请求,并发送带有

  • 我有一个Android应用程序,我可以在其中向一个servlet发送多部分post。但我要把电话限制在每5分钟一次。有了web表单,我就可以使用cookie了。对于android应用程序,它不是这样工作的。我怎么才能让它工作呢?

  • 在使用HikariCP dataSource的Spring Boot应用程序中,我使用helper类执行了HQL查询: 它工作正常,但是当我开始广泛使用类时,应用程序启动冻结,因为Hibernate会话随机关闭,事务等待30秒(HikariCP事务的默认超时值),然后get会话关闭错误(如果我使用getCurrentSession()而不是openSesssion(),则currentPersis

  • 我创建了简单的Java应用程序来学习Spring和hibernate集成。我做了所有的设置和应用程序也工作良好。 一切正常。但是,我想看看我的应用程序当前使用了多少会话,比如打开的连接和关闭的hibernate连接。 在Sessionfactory类中,我们使用“getStatistics”方法来检索hibernate统计数据,但这对我没有帮助。它也给了我零分。请找到下面的图片。 http://w