这二个属性默认情况均为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. iOS ARC下循环引用的问题 -举例说明strong和weak的区别

    strong:适用于OC对象,作用和非ARC中的retain作用相同,它修饰的成员变量为强指针类型weak:适用于OC对象,作用和非ARC中的assign作用相同,修饰的成员变量为弱指针类型assig ...

  2. Qt for Android 程序禁止屏幕旋转

    有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screen ...

  3. JavaScript 同源策略

    在JavaScript安全性限制Same-Origin Policy(同源策略)=>JavaScript只能访问与包含它的文档在同一域下的内容. 同源=>域名+协议+端口相同.

  4. 了解jsonp

    <script>                //创建全局函数,用来处理 跨域 获取到的信息:        function name(data){            ....   ...

  5. 重拾C,一天一点点_5

    switch(表达式){    case 整型常量表达式:语句序列    case 整型常量表达式:语句序列    default:语句序列} while(表达式)    语句 for(表达式1; 表 ...

  6. Oracle内存组件理论篇一

    目标 1.SGA结构 2.PGA结构 1.SGA Shared pool 1).共享池是对SQL.PL/SQL程序进行语法分析.编译.执行的内存区域. 在执行SELECT * FROM emp语句时, ...

  7. WPF之旅(一)- 概述

    WPF与之前出现的其他技术相比引入了“内置硬件加速”和“分辨率无关”等创新功能.WPF是一种成熟的技术,它是几个已经发布的.NET平台的一部分,并通过几个版本不断地进行完善(WPF3.0 -> ...

  8. 【Web学习日记】——在IIS上发布一个WebService

    没有开发过程,只是发布过程 一.前提 开发使用的是VS2013 从来没有做过Web的发布,在网上找例子,看到的总是与自己的情况不相符,而且也有人提出了VS2013发布网站的问题,但解决方案却很少,好不 ...

  9. Java并发编程:Lock(上)

    在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方 ...

  10. VB 思维导图总结(二)

    第六章.过程... 第七章.菜单工具栏... 第八章.文件系统处理.. 第九章.键盘和鼠标事件...