【问题标题】:Update all table data at a time in JPA在 JPA 中一次更新所有表数据
【发布时间】:2013-01-03 23:13:47
【问题描述】:

是否可以在一个查询中更新所有表数据?

我有一个数据库表 Person 和相应的 Entiry PersonEntity,我可以通过 JPA 获取列表中的所有 Person 数据,例如 List personAll。

我对 personAll 实例有几个 CRUD 操作,我想使用 Hibernate JPA 将所有这些更改反映到数据库中

换句话说,我希望将 Person 表的内容替换为 personAll 实例的新内容?

这个问题其实很长的解决方法是执行几次插入、删除和更新操作。但是应该有一个简单的方法吗?

如果 eash other 之间存在 OneToMany 关系,当有两个表 Shool Student 表时,我可以做类似的事情吗? Hibernate JPA value removing OneToMany relation

谢谢

【问题讨论】:

    标签: java hibernate jpa-2.0


    【解决方案1】:

    这取决于你的表中有多少行。

    如果您将所有行加载到 Hibernate 会话中并根据需要修改返回的实例,则任何更改都会在会话刷新时由 Hibernate 自动保存到数据库中。

    它取决于大小的原因是,如果您将一个巨大的表的内容加载到 Hibernate 会话中,您将面临内存不足错误的风险,即使您没有耗尽内存,刷新也会非常慢,因为每个会话中的实体需要检查是否有修改。

    【讨论】:

    • 表上不会有太多行,我认为最多 100 行。那么如何将所有这些更改反映到 DB 表中?我的意思是我期待一个采用 List personAll 实例的方法,并且所有插入、删除和更新操作都会自动进行?我不想参与这些操作,我只关注 List personAll 实例,确保 DB 中的 Table 在 persit 操作后会相同。
    • Hibernate 通过跟踪会话中所有加载的对象来工作。您对它们所做的任何更改都将自动保留。因此,您无需将列表传递给方法。只需加载它们,更改它们并关闭您的会话(确保首先刷新)。显然,这是为了更新(为要从数据库中删除的每个实例调用 session#delete,为新对象调用 session#save)。
    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2019-05-04
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多