hibernate中的session以及三种状态

本文介绍了Hibernate框架中Session的主要操作方法,包括保存、删除、更新等,并通过实例展示了如何使用get方法进行查询。此外,还详细解释了Hibernate中对象的三种状态及其识别方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

==============================================================================

一、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缓存)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值