【问题标题】:How to get JPA entities persisted/removed but not committed?如何让 JPA 实体持久/删除但未提交?
【发布时间】:2012-01-13 09:07:06
【问题描述】:

我有一个主子表。用户可以在选择主项/实体后添加/删除子项。当主项目列表选择索引更改时,我用数据库中此选定主项目的子项目填充子表/数组列表。当用户相应地单击子添加/删除按钮时,我打开了实体管理器,启动了事务,保留或删除子实体/项目。我的问题是在用户选择另一个主项目时跟踪新的和删除的子实体。因为我在用新的选定主项的子实体填充它之前清除子表/Arraylist(但不清除持久性上下文)。当用户再次选择前一个主项目时,我想反映新的/已删除的、尚未提交的子项目。希望正确地解释了我的问题。在 JPA 上使用休眠。谢谢。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    好吧,只需执行一个查询来获取所选主节点的所有子节点。即使事务尚未提交,事务也会在数据库中看到它们,因为它已经保存了它们。

    但是请注意,使用长事务是不可扩展的,并且会导致各种锁定和过时问题。为什么不保存孩子并在每次用户添加或删除孩子时提交?

    【讨论】:

    • 我也是这样期望的。奇怪的。昨天它没有按预期工作,今天是。不管怎么说,还是要谢谢你。我正在处理的项目是一个 javaFX 程序,只能在少数用户的桌面上运行。这就是为什么要长时间保持交易。
    【解决方案2】:

    我不希望在用户点击之间保持交易打开。他可以去喝杯咖啡然后离开。我宁愿使用临时表、会话、缓存、隐藏输入(如果是 Web 前端)等。

    【讨论】:

    • 你能解释一下并给出一些关于会话和缓存的链接吗?你在 jpa 上下文中提到这些吗?我的项目中没有 Web 服务器或 Web 应用程序、连接池和 Web 前端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2011-08-04
    • 2013-06-16
    • 2011-07-16
    • 2017-06-22
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多