hibernate学习笔记3----hibernate中的session接口介绍

session:
beginTransaction():开启事务就像初始化的数据库连接、语句对象
clear():清楚session中的缓存
close():关闭session,关闭数据库连接
connection():拿到数据库中session中的封装的connection,建议不要使用,因为hibernate中对于连接其实已经做了优化的
contains():判断返回元素对象的
delete():删除一个对象
evict():从缓存中清掉一个数据
flush():让session与数据库进行一次同步
get():从数据库中拿一条数据出来,根据主键取数据
load():懒加载,根据id查,(返回的是代理,不会立即访问数据库)。load不会最先访问数据库,之后第一次加载是才会访问。从缓存中
load中如果是空的null,就会自己new一个Object,不用写if(user !=null)这类代码
saveOrUpdate()、merge():根据ID和version的值来确定是save或是update。对未加入数据库的直接insert,对于已经加入数据库的执行update
persist():插入
与save()的区别:当没开启事务时,save()会插入不成功事务会回滚,persist()插入不成功不会执行事务回滚、
persist()在事务外不会产生insert语句

区别:

http://blog.csdn.net/pfpfpfpfpf/article/details/4401803
http://hyj0903.blog.163.com/blog/static/3090655220105156574446/

 

refresh():相当于重新读取一次
update():更新对象
lock():枷锁,把对象变成持久化对象,但不会同步对象的状态

 

扩展阅读:http://java.chinaitlab.com/base/904090.html

方法详解:http://blog.csdn.net/shrek_xu/article/details/740991

 

hibernate对象状态:
瞬时(transient):数据库中没有数据与之对应,超过作用域被jvm垃圾回收器回收,一般是new出来且与session没有关联的对象。
持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;
持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测出来)。
脱管/游离(detached):数据库中有数据与之对应,但当前没有session与之关联(session关闭了),脱管对象状态发生改变,hibernate不能检测到。

衡量对象状态:数据库中有没有数据、与session中有没有关系.

 

实体对象的三种状态:

瞬时 持久 脱管

实体对象的三个状态

瞬时:新建user对象时,此时数据库里没有记录,user会被垃圾回收机制回收。

持久:事务提交前,此时数据库里有记录,而且user变化会和数据库记录变化同步。

脱管:事务提交后,session关闭,此时数据库已有记录,但是user和数据库断开连接,user变化不会影响数据库记录。

 

这就关系到什么时候调用更新了,在脱管的时候,没办法同步数据库和user,只能调用update方法,而瞬时的时候,必须使用save方法做更新。可以根据Users.hbm.xml中id标签中的unsaved-value属性配置没保存时id的值

可以根据id号有无判断user出于瞬时态还是脱管态,瞬时态时id=0 (int默认),脱管态时id!=0.

 

saveOrUpdate 和 merge方法区别:

saveOrUpdate方法后user处于持久态

merge方法后user处于脱管态

 

 

update执行时间点:

  1. Session s = null;  
  2. Transaction ts = null;  
  3. try{  
  4.     s = HibernateUtil.getSession();  
  5.     ts = s.beginTransaction();  
  6.     s.save(user);  
  7.     user.setName("new name");  
  8.     user.setBirthday(new Date());  
  9.     ts.commit();  
  10. }finally{  
  11.     if(s != null){  
  12.     s.close();  
  13. }  

update只执行一次,在事物提交时ts.commit();

 

Hibernate 映射单个自然主键(unsaved-value):

http://blog.sina.com.cn/s/blog_5f43e6510100c9c0.html

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值