HIbernate数据动态更新

当spring整合hibernate之后事务就会被spring进行托管,那么当你在一个get一个对象之后在进行set对象时候你发现,事务提交后会执行一段update语句,数据库中的值也会改变,这就是动态更新。就是说,你的查询和赋值同时在一个相同的session中进行的,hibernate根据id判断是同一个对象,所以会自动更新相应的属性值。 


其实自动更新只是为了提高效率。 如果你不想让它自动更新,你们可采取以下方法: 在映射文件相应属性中设置update="false"可以不用更新该字段或者是在映射文件中的class标签里面加上:dynamic-insert="false" 

就像下边这样: 

<class name="com.orm.UserInfo"     table="user_info"     

         dynamic-update="false"     

         dynamic-insert="true"    

         optimistic-lock="version">


SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
session = HibernateUtil.openSession();
session.beginTransaction();
User u = new User();
u.setBorn(new Date());
u.setUsername("zhangsan");
u.setPassword("zhangsan");
session.save(u);
u.setPassword("222");           
//该条语句没有意义            
session.save(u);
u.setPassword("zhangsan111");           
//没有意义            
session.update(u);
u.setBorn(sdf.parse("1988-12-22"));            
//没有意义            
session.update(u);
session.getTransaction().commit();

这个时候会发出多少sql语句呢?还是同样的道理,在调用save方法后,u此时已经是持久化对象了,记住一点:如果一个对象以及是持久化状态了,那么此时对该对象进行各种修改,或者调用多次update、save方法时,hibernate都不会发送sql语句,只有当事物提交的时候,此时hibernate才会拿当前这个对象与之前保存在session中的持久化对象进行比较,如果不相同就发送一条update的sql语句,否则就不会发送update语句

Hibernate: insert into t_user (born, password, username) values (?, ?, ?)
Hibernate: update t_user set born=?, password=?, username=? where id=?

这样


转载于:https://my.oschina.net/u/2255569/blog/340644

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值