HIbernate中的Session
Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持久化操作核心API。
Session对象是有生命周期的,它以Transaction对象的事务开始和结束边界
Session作为贯穿Hibernate的持久化管理器核心,提供了众多的持久化的方法,如save(), update ,delete ,find(Hibernate 3中已经取消了此方法)等,通过这些方法我们可以透明的完成对象的增删改查(CRUD– create read update delete),这里所谓的透明是指,Session在读取,创建和删除影射的实体对象的实例时,这一系列的操作将被转换为对数据库表中数据的增加,修改,查询和删除操作。
Session有以下的特点
- 不是线程安全的,应该避免多个线程共享同一个Session实例
- Session实例是轻量级的,所谓轻量级:是指他的创建和删除不需要消耗太多资源
- Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存
Hibernate Session缓存被称为Hibernate的第一级缓存。SessionFactory的外置缓存称为Hibernate的二级缓存。这两个缓存都位于持久层,它们存放的都是数据库数据的拷贝。SessionFactory的内置缓存 存放元数据和预定义SQL, SessionFactory的内置缓存是只读缓存。
Hibernate Session缓存的三大作用:
- 减少数据库的访问频率,提高访问性能。
- 保证缓存中的对象与数据库同步,位于缓存中的对象称为持久化对象。
- 当持久化对象之间存在关联时,Session 保证不出现对象图的死锁。
Session 什么时候清理缓存?
- commit() 方法被调用时
- 查询时会清理缓存,保证查询结果能反映对象的最新状态。
- 显示的调用session 的 flush方法
Transaction
Transanction接口是Hibernate的数据库事务接口,用于管理事务,他对底层的事务作出了封装,用户可以使用Transanction对象定义自己的对数据库的原子操作,底层事务包括:JDBC API ,JTA(Java Transaction API)。。。。。
常用方法:
- public void commit() throws HibernateException 刷新当前的Session以及结束事务的工作,这个方法将迫使数据库对当前的事务进行提交
- public void rollback() throws HibernateException :强迫回滚当前事务
- public boolean isActive() throws HibernateException: 这个事务是否存活