【问题标题】:If I modify a Hibernate entity, after doing a save, when I commit would the changes be saved to the database如果我修改 Hibernate 实体,在保存后,当我提交时,更改会保存到数据库中
【发布时间】:2015-09-06 11:39:09
【问题描述】:

如果在 Hibernate 中,我会执行以下步骤:

  1. 打开一个会话。
  2. 创建一个新的休眠 POJO 对象(将被保存),并填写值。
  3. 现在我执行 session.save()。
  4. 现在我更改 POJO 对象 - 假设它是一个员工对象,我执行 emp.setName("Other Name") 即更改对象中员工的姓名。
  5. 现在我进行事务提交。

我的问题是将什么保存到数据库中 - 我执行 session.save() 之前的名称或更改后的名称,即“其他名称”?

【问题讨论】:

  • 你为什么不试试

标签: java database hibernate orm


【解决方案1】:

在您保存实体的那一刻,它就成为托管的,并且所有进一步的更改都会在Session.flush 期间传播到数据库。

当您保存实体时,您只触发了一个 EntityInsertAction 排队。更改实体后,当前实体状态已更改,因此在刷新期间,Hibernate 将简单地插入最新的实体状态,因此数据库将包含 "Other Name"

事实上,为托管实体调用类似save 的方法(触发实体merge)实际上会影响性能。

【讨论】:

    【解决方案2】:

    在使用托管实体时,当您不调用 save 时,它​​将自动保存。

    【讨论】:

      【解决方案3】:

      一旦您提交事务,您在会话中所做的一切都会提交到数据库中。即使您刷新会话,您也只是将更改添加到内存中的表上,而不是提交到数据库。

      所以最后,一旦 Hibernate 检测到会话是脏的,它就会提交更改,以防您在配置中进行自动脏检查,并且它足够聪明,可以查看对象会话的最后更改。所以是的,你会有“其他名字”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        相关资源
        最近更新 更多