您的位置:首页 > 其它

hibernate中的session以及三种状态

2011-04-01 09:46 218 查看
==============================================================================

一、Session的几个主要方法

==============================================================================
1.save,persist保存数据,persist在事物外不会产生insert语句。
2.delete删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
4.get,根据Id查询,会立刻访问数据库。
5.load,根据Id查询,(返回的是代理,不会立即访问数据库).
6.saveOrUpdate,merge(根据Id和version的值来确定是save或update),调用merge你的
对象还是托管的.
7.lock(把对象变成持久对象,但不会同步对象的状态).
===============================================================================
二、 提供get的一个例子
==============================================================================
用get方法执行查询的操作,如:
Session s = null;
try{
s = HibernateUtil.getSession();
Class usreClass = User.class;
User user = (User)s.get(userClass,id);
return user;
}catch(){
}finally{
if(s != null){
s.close();
}
}
===============================================================================
三、hibernate中对象的三种状态
===============================================================================
1.瞬时(transient): 数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,
一般是new出来且与Session没有关联的对象。

2.持久(persistent):数据库中有数据与只对应,当前与Session有关联,并且相关联的Session没有关闭,
事务提交时会影响到数据库(hibernate能检测到).

3.脱管(detached):数据库中有数据与之对应,但当前没有Session与之关联,脱管对象状态发生改变,
hibernate不能检测到。

===============================================================================
四、 状态识别
===============================================================================
1.数据库中是否有记录。
2.session是否关闭。

三种状态的区分关键:
1.有没有ID
2.ID在数据库中有没有
3.在内存中有没有(session缓存)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: