Session的基本操作

Session的基本操作

Session是hibernate中一个重要的持久化管理器。他能完成对持久化类实例的基本CRUD操作、执行条件查询、事务控制,持久化对象生命周期管理等。Session接口中的持久化操作方法基本上都生明可能会抛出一个HibernateException异常这个异常是一个非受检的异常,这意味着在使用session的持久化操作的方法时,可以处理这个异常,也可以不用理会,接下来介绍session的这些方法。

1、  public Serializable save(Object obj)throws HibernateException;持久化给定的瞬时实例,并返回该实例的对象标识符值。

当调用save()方法时,他会完成以下操作。

(1)      把瞬时对象加入到当前Session的缓存中,使它变为持久化对象。

(2)      选用映射文件指定的主键生成器为持久化对象分配唯一的OID(当对象处于持久化状态时,不允许程序随意修改它的OID)。

(3)      计划执行一个insert语句,把持久化对象的当前属性值组装到insert语句中。只有当session清理缓存时,才会执行SQl insert语句。如果在save()方法之后,修改了持久化对象的属性值,Session清理缓存时会额外执行SQL update语句。

2、  public Object get(Class clazz,Serializable id)throwsHibernateException:根据给定的OID返回一个持久化实例。

Get方法先检查当前session缓存中是否存在这个标识符值的持久化实例,如果存在直接返回;如果不存在,就检查二级缓存中是否存在,如果存在就直接返回;如果不存在,就从数据库表中获取数据返回;如果数据库表中也不存在,就返回null。

3、  public Object load(Class clazz,Serializable id)throwsHibernateException:根据给定的OID返回一个持久化对象。

Load方法先检查当前session缓存中是否存在这个标识符值的持久化实例,如果存在直接返回;如果不存在,就检查二级缓存中是否存在,如果存在就直接返回,如果不存在,Hibernate框架不检查数据库中是否存在这个标识符值的记录,而是直接创建一个代理对象并返回,这个代理对象只包含标识符值,并没有其他属性的实际数据。这种方式就是常说的延迟加载(懒加载)。当要使用这个标识符值对应实例的其他属性时,Hibernate才会从数据库中获取数据,必须保证这个操作在session未关闭前操作。如果此时数据库表中也不存在指定的标识符对应的行,就会抛出ObjectNotFoundException异常。

4、  public Object delete(Class clazz,Serializable id)throwsHibernateException;把指定的持久化状态变成瞬时状态,并从数据库表中移除对应的记录。

(1)      如果传入的实例是持久化状态的,session就计划执行一个delete语句。

(2)      如果传入的实例是脱管状态的,就先让它和当前的session关联转变为持久化对象,在计划执行一个delete语句。

5、  public Object update(Class clazz,Serializable id)throwsHibernateException;重附脱管状态,并把他的状态更新到数据库表中。

(1)      把托管状态加入到当前的session缓存中,使它变为持久化对象。

(2)      计划执行一个update语句。只有当session清理缓存时,才会执行SQLupdate语句。

6、  public Object saveOrUpdateClass clazz,Serializable id)throwsHibernateException;同时具有save()和update()的功能。

7、  public Object merge(Class clazz,Serializable id)throwsHibernateException;将给定实例的状态复制到具有标识符的持久化实例上,并返回这个持久化实例。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值