Hibernate的dynamic-insert和dynamic-update的使用
来源:互联网 发布:卢本伟淘宝店地址 编辑:程序博客网 时间:2024/04/29 06:38
Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update,select操作都是对表的所有字段操作.如果在一个表有很多字段的时候,在做初次inser的时候有比较多的字段为空值,或者经常update某少部分字段,应该在配置文件的<class>元素上将dynamic-insert和dynamic-update设置为true.其默认值都为false.
如有这样一张表:create table hbtest(id int,val1 varchar2(100),val2 varchar2(100));
1,在 dynamic-insert没有设置的时候
<class name="com.test.hb.dynamicupdate.Hbtest" table="HBTEST">
tbo.setId(new Integer(2));
tbo.setVal1("val1");
sessionFactory.getCurrentSession().save(tbo);
某些字段为空做insert,hibernate会用全字段的insert sql语句,如下:
insert into HBTEST(VAL1, VAL2,ID) values(?, ?,?)
2,将dynamic-insert设置为true,同样的保存,hibernate会动态生成SQL语句,没有值的字段不会出现在insert语句中.
<class name="com.test.hb.dynamicupdate.Hbtest" dynamic-insert="true" table="HBTEST">
insert into HBTEST(VAL1, ID) values(?, ?)
3,在 dynamic-update没有设置的时候
Hbtest tbo = (Hbtest) sessionFactory.getCurrentSession().load(Hbtest.class,new Integer(1));
tbo.setVal1("valXX");
tx.commit();
只更新部分字段,hibernate仍然对所有字段做更新:
update HBTEST set VAL1=?,VAL2=? where ID=?
4,同样的操作如果把设置为true的话,sql语句只包含更新的字段:update HBTEST set VAL1=? where ID=?
<class name="com.test.hb.dynamicupdate.Hbtest" dynamic-insert="true" dynamic-update="true" table="HBTEST">
5,Hibernate这种动态SQLupdate的特性是利用在对象从数据库加载到hibernate session的时候保存了一份快照,做更新的时候与这个快照做比较,只更新改动过的值.
所以下面这种情况就会用全部字段进行更新:,不设值的字段会被更新成null.
Hbtest tbo = new Hbtest();
tbo.setId(new Integer(1));
tbo.setVal1("val1ZZZ");
sessionFactory.getCurrentSession().update(tbo);
这种情况应该利用Hibernate提供的对SQL的支持,用SQL做更新操作.
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate、jpa 的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert和dynamic-update的使用
- Hibernate的dynamic-insert dynamic-update和select-before-update
- hibernate dynamic-insert 和 dynamic-update使用
- hibernate dynamic-insert 和 dynamic-update使用
- Hibernate的dynamic-insert与dynamic-update
- Hibernate的dynamic-insert与dynamic-update
- Hibernate的dynamic-insert与dynamic-update
- Hibernate的dynamic-update
- dynamic-insert和dynamic-update
- Hibernate的dynamic-insert的使用
- Hibernate优化(1)dynamic-insert和dynamic-update
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- 提高PHP编程效率的53个要点(转载)
- Linux Crontab 安装使用详细说明
- Oracle11g学习笔记(二)
- Latex中的插图心得
- Hibernate的dynamic-insert和dynamic-update的使用
- mecached 基础(二)--memcached安装和初次使用
- 更改表的owner
- Java内部类总结
- 冒泡排序,选择排序,插入排序
- ORA-27102:out of memeory 故障处理一例
- php导出Excel
- 批处理注册动态链接库文件(**.dll)
- 301 Redirect 资源永久重定向的实现方法