这二个属性默认情况均为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. SNRO:Number Range

    业务对象是在一定的编号范围内分配编号的,编号既可以是内部分配也可以是外部分配.对于外部分配,用户输入编号,系统检查这个编号是否被占用.对于内部分配,系统会自动的把编号分配给业务对象.所以内部分配和外部 ...

  2. 如何设置SecureCRT通过代理连接SSH[转]

    http://blog.didu.me/article/84 公司限制了连接外网的端口和IP,只能通过proxy 连接.刚配置了一下 secureCRT 连接外网,貌似速度还是不错,写出来共享下. 如 ...

  3. c#获取今天星期几

    System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(DateTime.Now.DayOfWeek)

  4. Gulp vs Grunt 前端构建工具对比

    Gulp vs Grunt 前端工程的构建工具对比 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Jav ...

  5. QA如何增强网站建设公司竞争力

    在上一篇文章<QA在网站建设公司中的作用>中我们已经详细说了QA的作用,不过有一点没有明确说明,也就是只有在超高速发展的网站建设公司中才会充分体现QA的价值.这并不是说在发展稳定的公司或低 ...

  6. Nginx启动、停止与平滑重启

    如何启动Nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 停止Nginx:可以发送向通信号给Nginx主进程的 ...

  7. 关于CSS中的PX值(像素)

    场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...

  8. C# CacheHepler Class

    internal class CacheHelper { /// <summary> /// Insert value into the cache using /// appropria ...

  9. 获取枚举Description的Name

    /// <summary> /// 获取枚举Description的Name /// </summary> /// <param name="enumName& ...

  10. C++(MFC)

    C++(MFC) 1.关联变量(与控件关联): (1)一组单选按钮:需要将第一个单选按钮的Group选项设为true,则单选按钮就为一组(组框为标示作用).选中第一个则为0,第二个为1,依次类推(P2 ...