理解操纵持久化方法

首先搞清游离对象,临时对象和持久化对象与数据库对象之间的关系

游离对象与临时对象的相同之处在于,两者都不被Session关联,因此hibernate不会保证它们的属性变化与数据库保持同步。
游离对象与临时对象的区别在于:前者是由持久化对象转变过来的,因此可能在数据库中还存在对应的纪录,而后者在数据库中没有对应的纪录。
持久化对象的特征:
总是被一个Session实例关联。持久化对象与数据库中相关纪录对应。Session在清理缓存时,会根据持久化对象的变化,来同步更新数据库。

因此以下操作针对不同状态的对象。


1.Session.save(),是将临时对象转变为持久对象。在Session.close()后,执行向数据库中insert的操作。
2.Session.load() or Session.get()
返回的对象总是处于持久化状态,可以通过object.set***("String")进行修改。在Session.close()后同步更新数据库。
3.Session.update()
使游离对象转变为持久化对象。由于游离对象在数据库中有对应的纪录,因此可以执行update操作。如果传入的参数为临时对象,临时对象在数据库中没有对应的纪录,执行update操作显然会出现错误。所以Session.update()是用来将游离对象转变为持久化对象。
4.Session.saveOrUpdate()
如果传入的参数为临时对象,则调用save()方法,将其变为持久化对象。
如果传入的参数为游离对象,则调用update()方法,将其变为持久化对象。
5.Session.delete()
用于从数据库中删除与java对象对应的纪录。
如果传入的参数是持久化对象(如用Session.get()出来一个持久对象),Session就计划执行一个delete语句。
如果传入的参数是一个游离对象,先使游离对象被Session关联,使它变为持久化对象,然后计划执行一个delete语句。

临时对象在转化成为持久化对象后,如果再修改了对象的属性,则在Session.close()后会再针对此次修改执行一次update语句。
例如:Customer c = new Customer();
      c.setName("tom");
      Session.save(c);
      c.setName("mario");
      Session.close();
先执行insert into customer("","tom");
再执行update customer set name = "mario" where id = "";
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值