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

2023-11-24

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

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

实现透明的会话重新打开可能也是一个好主意,以防连接中断——用户倾向于让应用程序长时间保持打开状态,即使数据库服务器在周末重新启动,它也应该在周一继续工作。

Update

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(),据我所知,它也会清理缓存。此外,还可以通过调用 Session.setCacheMode() 来手动控制缓存策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swing 应用程序中使用 Hibernate 进行会话管理 的相关文章

随机推荐

  • 如何绕过 Linux“太多参数”限制

    我必须将 256Kb 的文本作为参数传递给 aws sqs 命令 但在命令行中遇到了大约 140Kb 的限制 这个问题在很多地方都有讨论过自 2 6 23 内核起 该问题已在 Linux 内核中解决 但无法让它发挥作用 我在用3 14 48
  • 如何更改默认分支以推送到 Mercurial 中?

    我喜欢在 Mercurial 中创建命名分支来处理可能需要一段时间编码的功能 所以当我推送时我会执行hg push r default确保我只将更改推送到默认分支 然而 必须记住的是一种痛苦 r default每次我执行推送或传出命令时 所
  • @Temporal(TemporalType.DATE) 与 Oracle 12

    在我们的数据库中 我们有多个带有日期字段的实体 Oracle 将每个日期视为相同的 包含日期和时间部分 然而 JPA 实体通过注释 Temporal 进行区分 当我们想省略时间部分时 我们用 Temporal TemporalType DA
  • 在alertDialog中验证EditText

    我正在尝试添加空字段验证EditText on AlertDialog 但即使字段为空后 也不会显示错误消息 而是AlertDialog正在关闭 但是 如果条件运行良好 因为如果任何字段为空 我将无法进行后期操作 这是我的 Java 示例代
  • 如何使用返回的 linq 变量?

    我决定快速了解一下 LINQ 方面的内容 而不是仅仅使用直接的 foreach 循环 但我在让它工作时遇到了一些麻烦 主要是由于我认为的数据类型 到目前为止 我已经得到了这个 var selectedSiteType from sites
  • 页面的官方 Facebook RSS 提要

    许多人已经描述了如何获取 Facebook 页面的 RSS 数据源 例如 http ahrengot com tutorials facebook rss feed 以下 URL 提供了可口可乐页面的 feed 但是 我似乎无法在 face
  • 在 Web 应用程序之间共享 ASP.NET 资源文件

    我有多个项目需要共享资源文件 resx 已提出将资源文件移动到单独的程序集并让 Web 项目引用它的建议 有如何执行此操作的示例吗 我是否创建一个新的类库项目并将 App GlobalResource 文件夹移到其中 我认为这不会起作用 因
  • 如何使用自然的entrySet()顺序迭代HashMap?

    我的地图包含按字母顺序排序的键 当我显示它时 我使用的是entrySet iterator 但我的结果不是按字母顺序排列的 我如何才能按顺序获得结果 不 您的地图不按字母顺序保存元素 你可能有 put 然后按该顺序 但映射没有定义的迭代顺序
  • 您的 Android App Bundle 使用错误的密钥进行签名。确保您的应用程序包使用正确的签名密钥进行签名,然后重试

    如何使用正确的签名密钥对我的 Android 应用程序包进行签名 我为这个问题把头撞在桌子上大约两个小时 当我最终放弃并填写 重置密钥 请求时 我意识到我当前正在尝试将其上传到错误的项目一直以来 因此 第一步 确认您正在尝试上传到正确的项目
  • 流式 HTTP 响应,刷新到浏览器

    我有如下的观点 from django views decorators http import condition def stream for i in range 0 40 yield 1024 yield d i time slee
  • 贫血领域模型:优点/缺点

    我想知道使用贫血域模型的优点和缺点 请参阅下面的链接 福勒文章 由于 贫血领域模型 是反模式 为什么有这么多系统实现它 我认为有几个原因 1 系统的复杂性 在一个简单的系统中 几乎是您在互联网上找到的所有示例和示例代码 如果我想实现 将产品
  • 如何在单击某些按钮时重新加载我的 UIViewController?

    我正在开发一个 iPhone 应用程序 我有一个UIViewController类中存在一些封面流动画 根据设计 我的视图顶部有一些 5 个按钮 每个按钮都有一个IBAction单击按钮的方法我需要显示具有不同数据的不同组的封面流 并且封面
  • 在 Perl 正则表达式中嵌入评估

    所以我正在编写一个快速的 Perl 脚本 它清理一些 HTML 代码并通过 html gt pdf 程序运行它 我希望丢失尽可能少的信息 因此我想扩展文本区域以适应其中当前的所有文本 在我的例子中 这意味着根据文本框中字符串的值将行数设置为
  • C# 线程安全的StreamWriter 怎么做呢? 2

    所以这是我上一个问题的延续 所以问题是 构建线程安全的程序的最佳方法是什么 因为它需要将双精度值写入文件 如果通过流写入器保存值的函数被多个线程调用 最好的方法是什么 我修改了MSDN上找到的一些代码 下面怎么样 这个正确地将所有内容写入文
  • Django - 限制表单中选择字段的选择

    我在 Django 中的选择字段上遇到问题 我需要一个表格来将订单移动添加到工单中 这些是choices py中的选择 STATUS CHOICES 1 Orden Creada 2 En Tienda Asociada 3 Recibid
  • 如何将序列号列添加到结果数据中? [复制]

    这个问题在这里已经有答案了 可能的重复 向此 T SQL 查询添加行号 我使用的是 sql server 2008 当我输入 从员工中选择 结果是这样的 EmpID EmpName Salary DB1608 David 100000 JT
  • JavaScript .prototype 如何工作?

    我不太热衷于动态编程语言 但我已经编写了相当多的 JavaScript 代码 我从来没有真正了解过这种基于原型的编程 有人知道这是如何工作的吗 var obj new Object obj prototype test function a
  • SQL LIKE 语句的 LINQ 版本

    我是 LINQ 的新手 在网上搜索模仿 SQL 的 LIKE 语句的 LINQ 示例并不能让我满意 我想要的是产生与此 SQL 相同的查询结果 SELECT FROM table 1 WHERE column 1 LIKE 0 我想从 ta
  • Neo4j:MERGE 创建重复节点

    我的数据库模型有用户和 MAC 地址 一个用户可以有多个MAC地址 但一个MAC只能属于一个用户 如果某个用户设置了他的 MAC 并且该 MAC 已经链接到另一个用户 则现有关系将被删除 并在新所有者和该 MAC 之间创建新关系 换句话说
  • 在 Swing 应用程序中使用 Hibernate 进行会话管理

    如何在 Java Desktop Swing 应用程序中进行 Hibernate 会话管理 您使用单个会话吗 多次会议 以下是有关该主题的一些参考资料 http www hibernate org 333 html http blog sc