最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Hibernate的dynamic-insert和dynamic-update的使用

来源:动视网 责编:小采 时间:2020-11-09 11:39:34
文档

Hibernate的dynamic-insert和dynamic-update的使用

Hibernate的dynamic-insert和dynamic-update的使用:Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的
推荐度:
导读Hibernate的dynamic-insert和dynamic-update的使用:Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的


Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update

Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update,select操作都是对表的所有字段操作.如果在一个表有很多字段的时候,在做初次inser的时候有比较多的字段为空值,或者经常update某少部分字段,应该在配置文件的元素上将dynamic-insert和dynamic-update设置为true.其默认值都为false.

如有这样一张表:create table hbtest(id int,val1 varchar2(100),val2 varchar2(100));

1,在 dynamic-insert没有设置的时候


Hbtest tbo = new 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语句中.


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=?

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在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的
推荐度:
标签: 更新 update update的
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top