这二个属性默认情况均为false,你可以通过以下二种方式进行配置使用:

  1.Annotation

@Entity
@Table(name = "stock_transaction", catalog = "mkyong")
@org.hibernate.annotations.Entity(
dynamicInsert = true
)
public class StockTransaction implements java.io.Serializable {

  2.XML mapping

<hibernate-mapping>
<class name="com.triman.bo.SysUser" table="SYS_USER" dynamic-insert="true" dynamic-update="true">
<id name="id" type="java.lang.String">
<column name="ID" length="36" />
<generator class="uuid.hex" />
</id>
<property name="username" type="java.lang.String">
<column name="USERNAME" length="30" not-null="true" unique="true" />
</property>
<property name="name" type="java.lang.String">
<column name="NAME" length="30" not-null="true" />
</property>
</hibernate-mapping>

一、dynamic-insert属性

  设置dynamic-insert="true"属性,hibernate在生成insert语句时,会过滤过值为null的属性。

以上图中SysUser.hbm.xml所示,当dynamic-insert=false时

SysUser user=new SysUser();
user.setName("abc");
session.save(user);

在执行此段程序时,会生成sql语句为:

Hibernate:
INSERT
INTO
SysUser
(id,username,name)
VALUES
(?, ?, ?);

当dynamic-insert="true"时,生成的sql语句为:

Hibernate:
INSERT
INTO
SysUser
(id,name)
VALUES
(?, ?);

Hibernate生成语句时,对值为null的属性不进行转换。

二、dynamic-update属性

  设置dynamic-update="true"属性,hibernate在生成update语句时,会过滤过值为null的属性。

当dynamic-update="false"时,即默认选项:

Query q = session.createQuery("from SysUser where id = :userId ");
q.setParameter("userId", "1");
SysUser user =(SysUser)q.list().get(0);
user.setName("张三");
session.update(user);

执行上段程序,生成的sql语句为:

Hibernate:
UPDATE
SysUser
SET
USERNAME=?,
NAME=?
WHERE
ID=?

当dynamic-update=true时,Hibernate生成的语句不包含没有被修改的字段:

Hibernate:
UPDATE
SysUser
SET
NAME=?
WHERE
ID=?

三、总结

  在某种情况下,如一张表中含有上百个字段,或是表中含有大数据字段,添加dynamic-insert=true和dynamic-update=true属性,insert/update时生成语句时回避一些未涉及的字段,提升系统执行性能。既然能提升性能,Hibernate为什么不把默认值设为true呢?

[Hibernate]dynamic-insert和dynamic-update属性的更多相关文章

  1. Hibernate中的inverse和cascade属性

    Hibernate中的inverse和cascade属性 inverse的值有两种,"true"和"false".inverse="false&quo ...

  2. 【MyBatis源码分析】insert方法、update方法、delete方法处理流程(下篇)

    Configuration的newStatementHandler分析 SimpleExecutor的doUpdate方法上文有分析过: public int doUpdate(MappedState ...

  3. 【C# 基础概念】C# 4 dynamic - var, object, dynamic的区别以及dynamic的使用

    阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似.你 ...

  4. MongoDB中insert方法、update方法、save方法简单对比

    MongoDB中insert方法.update方法.save方法简单对比 1.update方法 该方法用于更新数据,是对文档中的数据进行更新,改变则更新,没改变则不变. 2.insert方法 该方法用 ...

  5. MySQL优化--INSERT ON DUPLICATE UPDATE死锁

    INSERT ON DUPLICATE UPDATE与死锁 在MySQL中提供两种插入更新的方式:REPLACE INTO和INSERT ON DUPLICATE UPDATE,简化了“存在则更新,不 ...

  6. sqlalchemy insert on duplicate update

    sqlalchemy insert on duplicate update from sqlalchemy.dialects.mysql import insert insert_stmt = ins ...

  7. C#动态对象(dynamic)示例(实现方法和属性的动态)

    C#的动态对象的属性实现比较简单,如果要实现动态语言那种动态方法就比较困难,因为对于dynamic对象,扩展方法,匿名方法都是不能用直接的,这里还是利用对象和委托来模拟这种动态方法的实现,看起来有点J ...

  8. Hibernate控制insert\update语句

  9. Hibernate更新数据(不用update也可以)

    在介绍hibernate的更新之前,我们先来看看session的两个方法.load和get方法:这两个方法是获取数据的根据对象的id值: 先看两段代码.load和get的方法都含有两个参数,前者是得到 ...

  10. Hibernate save, saveOrUpdate, persist, merge, update 区别

    Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...

随机推荐

  1. How to using x++ creating Vendors [AX2012]

    .//Create party for the vendor public void createParty(VendorRequestCreate _vendorRequestCreate) { ; ...

  2. 小课堂Week10 例外处理设计的逆袭Part3

    小课堂Week10 例外处理设计的逆袭Part3 今天是<例外处理设计的逆袭>这本书阅读的第三天,也是最后一天,我们会主要通过实例,对Part2中提出的例外处理等级进行解读. Level1 ...

  3. Linq to Entities

    首先要添加一个ADO.NET实体数据模型 添加一个Entities 对象,其用法和linqtosql类似例如: StudentInfoEntities2 entity = new StudentInf ...

  4. 在有跳板机的情况下,SecureCRT自动连接到目标服务器

    为了服务器的安全,运维人员经常会要求我们先登录到跳板机,然后再SSH连接到目标服务器.但是这样是很繁琐的,每次在SecureCRT创建一个连接,都需要输入SSH命令,然后输入密码. 下面的方法可以实现 ...

  5. 【转】如何在 Windows 中执行干净启动

    完成故障排除后,请执行以下步骤将计算机重置为正常启动. Windows 8.1 和 Windows 8 从屏幕右边缘滑入,然后点按“搜索”.您也可以将鼠标指向屏幕的右下角,然后单击“搜索”. 在搜索框 ...

  6. Configure Log Shipping

    准备工作 两台装有的Windows Server 2012R2以及SQL Server 2012的服务器 下载评估版 Windows Server 2012 R2 下载 Microsoft SQL S ...

  7. 编辑器未包含main类型解决方法

    将文件移到 src 这个 Java Source Folder 下面去,现在在外面的 java 文件不会被当成一个需要编译的类,eclipse 不会编译 Java Source Folder 外面的任 ...

  8. 阿里云mysql数据库恢复总结,mysql binlog日志解析

    由于意外..阿里云mysql中有一张表被全部删除了,深吸三口气候,开始解决. 首先用凌晨的自动备份的,进行全量恢复,然后找binlog日志(见下文),查找从全量备份到数据删除之间的记录 这导致了一个问 ...

  9. Thinkphp模板中使用自定义函数的方法

    注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...

  10. ActiveMQ使用记录

    1.在Linux中安装ActiveMQ 官方文档地址:http://activemq.apache.org/getting-started.html#GettingStarted-StartingAc ...