【问题标题】:Hibernate: update entites through native SQL or generated quiresHibernate:通过原生 SQL 或生成的查询更新实体
【发布时间】:2011-11-03 09:37:00
【问题描述】:

在 hibernate 中,我们可以通过多种不同的方式更新 DB 中的实体。 如果我们在打开的会话中更改附加的实体,然后提交更改(通过关闭会话),所有更改都将保存在数据库中。但是,例如,特定实体有很多字段。我们只想改变其中的几个。然后,hibernate 将生成查询,它将更新实体的 所有 字段:已更改和未更改。因此,hibernate 生成的更新查询存在开销。如果我们知道,对象的哪些字段将被更改,那么创建导航 SQL 查询会更好,我们只能更新指定的字段吗?有什么好处和坏处?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您可以将 Hibernate 配置为仅更新更改的字段,如下所示:

    @org.hibernate.annotations.Entity(dynamicUpdate = true)
    

    但是,应该仔细测试此设置的实际效果,因为在某些情况下它会降低性能。

    另请参阅:

    【讨论】:

    • 谢谢,我试过这个解决方案,它有效。但是什么是正确的识别方法,它如何影响性能?
    • @kiRach:我认为您不应该尝试这种优化,除非您发现更新查询会形成瓶颈。而当你尝试的时候,你应该检查一下这个瓶颈是否消失了。
    猜你喜欢
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2011-08-28
    • 2021-11-24
    • 2021-10-12
    • 2011-04-13
    • 2012-03-09
    相关资源
    最近更新 更多