gpt4 book ai didi

hibernate - dynamic-update=true 如何在 hibernate 内部工作?

转载 作者:行者123 更新时间:2023-12-03 13:25:29 29 4
gpt4 key购买 nike

所以我明白了什么设置这个属性动态更新=真 确实,即它只考虑那些被修改的字段,而忽略为其他字段设置空值的工作。节省开销,性能好。

好奇地问:hibernate是怎么知道所有字段都被修改了什么的?在触发更新查询之前,它是否首先将选择查询生成的结果与数据库进行比较?假设是,那么比较不是对性能的开销吗?

如我错了请纠正我。提前致谢!

最佳答案

因此,经过将近 2 个月的等待,我终于能够在各种来源的帮助下得出这个结论,作为我自己问题的答案:

1.) 使用 dynamic-update 时, Hibernate 每次都要生成对应的 SQL 字符串,因此对 Hibernate 有性能成本
边。换句话说,在数据库端和 Hibernate 端的开销之间存在权衡。

2.) Hibernate 缓存每个实体的实际 SELECT、INSERT 和 UPDATE SQL 字符串。这导致您不必每次都重新创建这些语句
查找、持久化或更新实体。但是,使用 dynamic-update 时,Hibernate每次都要生成对应的SQL字符串。
这会导致 Hibernate 方面的性能成本。

3.) 应用于非常小且简单的表时很有用,因为使用此注释可以显着提高性能。
更现实的情况是,在使用远程数据库的更广泛的表上,性能提升可能更明显。当然,您从中获得的里程将
变化的大部分列都需要更新。

4.) @DynamicUpdate annotation/ dynamic-update=true用于指定无论何时修改实体都应生成 UPDATE SQL 语句。
默认情况下,Hibernate 使用缓存的 UPDATE 语句来设置所有表列。当实体使用 @DynamicUpdate 注释时注解,
PreparedStatement 将仅包括其值已更改的列。

总体可以概括为:

  • 运行时 SQL 生成开销。
  • 不再使用 PreparedStatement(caching)。
  • 性能开销。

  • 学分 : Hibernate ORM 5.2.7.Final 用户指南, http://memorynotfound.com/hibernate-dynamic-update-attriburte-example/
    , https://stackoverflow.com/a/3405560/1004631

    P.S.:也适用于 dynamic-insert=true/ @DynamicInsert注解

    关于hibernate - dynamic-update=true 如何在 hibernate 内部工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41633250/

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