[Hibernate]dynamic-insert和dynamic-update属性
这二个属性默认情况均为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属性的更多相关文章
- Hibernate中的inverse和cascade属性
Hibernate中的inverse和cascade属性 inverse的值有两种,"true"和"false".inverse="false&quo ...
- 【MyBatis源码分析】insert方法、update方法、delete方法处理流程(下篇)
Configuration的newStatementHandler分析 SimpleExecutor的doUpdate方法上文有分析过: public int doUpdate(MappedState ...
- 【C# 基础概念】C# 4 dynamic - var, object, dynamic的区别以及dynamic的使用
阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似.你 ...
- MongoDB中insert方法、update方法、save方法简单对比
MongoDB中insert方法.update方法.save方法简单对比 1.update方法 该方法用于更新数据,是对文档中的数据进行更新,改变则更新,没改变则不变. 2.insert方法 该方法用 ...
- MySQL优化--INSERT ON DUPLICATE UPDATE死锁
INSERT ON DUPLICATE UPDATE与死锁 在MySQL中提供两种插入更新的方式:REPLACE INTO和INSERT ON DUPLICATE UPDATE,简化了“存在则更新,不 ...
- sqlalchemy insert on duplicate update
sqlalchemy insert on duplicate update from sqlalchemy.dialects.mysql import insert insert_stmt = ins ...
- C#动态对象(dynamic)示例(实现方法和属性的动态)
C#的动态对象的属性实现比较简单,如果要实现动态语言那种动态方法就比较困难,因为对于dynamic对象,扩展方法,匿名方法都是不能用直接的,这里还是利用对象和委托来模拟这种动态方法的实现,看起来有点J ...
- Hibernate控制insert\update语句
- Hibernate更新数据(不用update也可以)
在介绍hibernate的更新之前,我们先来看看session的两个方法.load和get方法:这两个方法是获取数据的根据对象的id值: 先看两段代码.load和get的方法都含有两个参数,前者是得到 ...
- Hibernate save, saveOrUpdate, persist, merge, update 区别
Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...
随机推荐
- 运行yum报错Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
今天给Centos通过rpm -Uvh装了个epel的扩展后,执行yum就开始报错: Error: Cannot retrieve metalink for repository: epel. Ple ...
- CentOS 普通用户设置sudo权限
1.先切换到root用户下,输入命令 su 2.添加sudo文件的写权限,命令是: chmod u+w /etc/sudoers 3.编辑sudoers文件 vi /etc/sudoers 找到 ro ...
- 【面试虐菜】—— LVS负载均衡
Load Balancer(负载均衡器): Load Balancer是整个集群系统的前端,负责把客户请求转发到Real Server上.Load Balancer通过Ldirectord监测各Rea ...
- 忘记linux root密码怎么办?
摘自:<鸟哥的Linux私房菜> 常常有些朋友在配置好了Linux之后,结果root密码给他忘记去!要重新安装吗?不需要的, 你只要以单人维护模式登陆即可更改你的root密码喔!由于lil ...
- java实现mysql数据库的备份及还原
备份: public static void backup() { try { Runtime rt = Runtime.getRuntime(); // 调用 调用mysql的安装目录的命令 Pro ...
- js中typeof可以准确判断哪些变量类型
typeof 运算符返回一个用来表示表达式的数据类型的字符串. 可能的字符串有:"number"."string"."boolean".& ...
- google api , using a refresh token to get the access token
router.get('/refresh',function(req,res){ oauth2Client.credentials = { refresh_token: '1/RqVyL7yLBxws ...
- 修改myeclipse的jsp模板
在myeclipse的安装目录下: C:\Users\Seeker\AppData\Local\MyEclipse Professional\plugins 找到com.genuitec.eclips ...
- Cocos2D 指定文件夹创建项目
参考http://www.cnblogs.com/skynet/p/3428369.html 通过下面的一些改造,可以让新建的cocos2d-x项目独立于cocos2d-x引擎目录: 1) 将 ...
- Careercup - Facebook面试题 - 5733320654585856
2014-05-02 09:59 题目链接 原题: Group Anagrams input = ["star, astr, car, rac, st"] output = [[& ...