因此,我了解设置此属性 dynamic-update = true会 做什么,即,它仅考虑那些已修改的字段,并省略了为其他字段设置空值的工作。
节省开销,性能良好。
出于好奇而问:hibernate如何知道所有字段都被修改了?在触发更新查询之前,它是否先将选择查询生成的结果与数据库进行比较?假设是,那么比较不是性能的开销吗?
如我错了请纠正我。提前致谢!
因此,经过将近两个月的等待,我终于能够在各种来源的帮助下得出以下建议作为对我自己问题的回答:
1.)使用时dynamic- update
,Hibernate每次都必须生成相应的SQL字符串,因此Hibernate方面会降低性能。换句话说,在数据库端和hibernate端的开销之间需要权衡。
2.)Hibernate为每个实体缓存实际的SELECT,INSERT和UPDATE
SQL字符串。这样就不必在每次要查找,保留或更新实体时都重新创建这些语句。但是,使用时dynamic- update
,Hibernate必须每次都生成相应的SQL字符串。这会导致hibernate方面的性能损失。
3.)应用于非常小的和简单的表时很有用,因为使用此注释可以显着提高性能。在更现实的情况下,在使用html" target="_blank">远程数据库的更大表上,性能提升可能会更加明显。当然,您从中获得的里程数会有所不同,大多数列都需要更新。
4.)@DynamicUpdate annotation/ dynamic-update=true
用于指定每次修改实体时都应生成UPDATE
SQL语句。默认情况下,Hibernate使用缓存的UPDATE语句来设置所有表列。当使用注释对实体进行@DynamicUpdate
注释时,PreparedStatement将仅包括其值已更改的列。
总体可以总结为:
积分 : _Hibernate的ORM 5.2.7.Final用户指南, http://memorynotfound.com/hibernate-
dynamic-update-attriburte-example/
PS:dynamic-insert=true/ @DynamicInsert
注解也适用
问题内容: 我需要在hibernate状态下禁用ONLY_FULL_GROUP_BY。这是我当前的会话工厂。我不确定如何在其中指定sql_mode =’‘。 问题答案: 我认为您可以在JDBC连接字符串中进行设置,例如
问题内容: 我想在 Hibernate中 执行以下查询吗? 问题答案: 假设您的表是由一个类和实例变量映射的。然后,您将执行以下操作: 它应该返回您要寻找的结果。您只需要使名称适应您的类和参数名称即可。
问题内容: 我尝试从hibernate注释创建表。我需要具有Double类型的列,其长度指定为:(10,2)。因此,SQL语法显示如下: 我试图做到这一点: 但是当我查看创建的表时,未指定Double列的长度。hibernate有解决方案吗?还是有必要手动更改表配置? 谢谢! 问题答案: Column批注的元素 仅在使用字符串值的column时适用 。在您的情况下,应使用和元素。 这是规范中关于它
问题内容: 什么和何时在休眠状态下使用DiscriminatorValue注释的最佳方案是什么? 问题答案: 这两个链接帮助我最了解继承概念: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6 要了解
问题内容: 如果数据库中有2列,例如。 如何告诉Hibernate通过varchar进行代码搜索? 在休眠映射字符串中,字符串被映射到nvarchar,并产生如下查询: 这非常糟糕,因为它导致索引扫描而不是索引查找操作(扫描所有索引节点而不是直接转到请求的节点) 由于代码用于数百万行以及几个索引和外键中,因此将代码从varchar更改为nvarchar会导致性能下降(IO操作更多,因为nvarch
问题内容: 什么时候使用独立标准?使用分离标准而不是普通标准有什么好处? 谢谢! 问题答案: 根据文档 一些应用程序需要在“分离模式”下创建条件查询,在该模式下,Hibernate会话不可用。此类可以在任何地方实例化,然后可以通过将会话传递到来获得一个Criteria 。所有方法都具有与Criteria接口的相应方法相同的语义和行为。