gpt4 book ai didi

java - 使用 JPA 和 BeansBinding 时保存数据

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:16 25 4
gpt4 key购买 nike

我目前正在桌面应用程序中试验 JPA,同时使用 BeansBinding 来简化 GUI 开发。到目前为止,效果还不错。

作为示例应用程序,我有一个只有一个表的小型数据库。我成功创建了实体 PU。接下来,我将一个 JTable 放到主 JFrame 中,并将它的列绑定(bind)到一个 JPA 查询。这就像一个魅力。因此,对实体所做的更改反射(reflect)在表中,反之亦然。

接下来,我想让表可编辑,这样更改就会持久保存到数据库中。我想到的最简单的方法是开始查询并立即提交。所以,假设我在某处有一个 JButton,在 actionPerformed 上执行以下操作:

private void saveClicked(java.awt.event.ActionEvent evt) {
this.myEntityManager.getTransaction().begin();
this.myEntityManager.getTransaction().commit();
}

这很好用,但对我来说却奇怪地错了。我还尝试在 windowClosing 上执行此操作。成功了。

但为什么这有效?我的意思是,在事务 begincommit 之间没有任何代码。更重要的是,可以吗?做这个?

最佳答案

这种有点不稳定的行为,其中 entitymanager 在没有被明确告知的情况下保留未提交的更改,这是因为应用程序管理的实体管理器总是被扩展。 JPA 规范(第 3.3 节)说:

The scope of the persistence context of an application-managed entity manager is extended. It is the responsibility of the application to manage the lifecycle of the persistence context.

因此,当相关 bean 已经在持久性上下文中并且您执行 transaction.commit 时,即使没有明确的 entitymanager.persist,任何未提交的更改都将被持久化。您可以通过在提交事务之前清除实体管理器 (entitymanager.clear) 来自行验证此行为。这将从 tx-commit 中删除实体,并导致事务不对数据库执行任何更改。

关于java - 使用 JPA 和 BeansBinding 时保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com