Hibernate框架中Session的基本操作
来源:互联网 发布:南钢实名举报 知乎 编辑:程序博客网 时间:2024/05/16 07:40
Session的基本操作
Session接口可以说是Hibernate框架中使用最多的一个接口,他负责所有的持久化工作、负责管理持久化对象的生命周期、提供第一级别的高级缓存来保证持久化对象的数据与数据库同步。
Session的缓存:
缓存是指:java对象的属性占用的内存空间,一般使用集合类型的属性来作为缓存。Session这一级别的缓存称之为以及缓存,它是实现类SessionImpl中的成员属性persistenceContext(持久化上下文)中定义的一系列Java集合(map)属性构成的。
当应用程序调用Session的CRUD方法以及调用查询接口的list(),iterate()或filter()方法时,如果在Session缓存中不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中,如果存在就不需要再去数据库加载而是直接使用缓存中的对象,可以减少访问数据库的频率,提高程序运行的效率。当Session在清理缓存时,Hibernate会自动进行脏数据检查,根据缓存中对象的状态变化来同步更新数据库。
利用Session进行持久化操作时,当调用Transaction的commit()事务提交方法时,会自动进行缓存清理同步数据库。另外,Session接口提供几个跟缓存相关的方法:
1、public void flush throws HibernateException:刷新缓存。它与事务提交commit()方法有不同之处:flush()进行缓存的清理,执行一系列的SQL语句,但不会提交事务。而commit()方法会先调用flush()方法,然后再提交事务。
2、public void setFlushMode(FlushMode flushMode):可以自定义设置清理缓存的时间点。
3、public FlushMode getFlushMode():获取当前的缓存清理的模式。(Session的缓存一般交由Hibernate框架自动管理而无需程序员干预)。
Session的基本操作:
Session是Hibernate中一个最重要的持久化管理器。它能完成对持久化类实例的基本CRUD操作、执行条件查询、事务控制,持久化对象生命周期管理等。Session接口中的持久化操作方法基本上都声明可能会抛出的一个HibernateException异常,这个异常是一个非受检的异常,这意味着在使用Session的持久化操作方法时可以处理这个异常,也可以不用理会,接下来介绍Session的这些方法:
Public Serializable save(Object obj)throw HibernateException:持久化给定的瞬时实例,并返回该实例的对象标识符值。
当调用save()方法时,它会完成一下操作:
1、 把瞬时对象加入动当前Session的缓存中,使他变为持久化对象。
2、 选用映射文件指定的主键生成器为此持久化对象分配唯一的OID(当对象处于持久化状态时,不允许程序随意改他的OID)
3、 计划执行一个insert语句,把此持久化对象的当前属性值组装到insert语句中。只有当Session清理缓存时,才会执行SQL insert语句。如果在save()方法之后,修改了持久化对象的属性值,Session清理缓存时会额外执行SQL update语句。
Public Object get(Classclazz,Serializable id) throws HibernateException:根据给定的OID返回一个持久化实例。Get方法先检验当前Session缓存中是否存在这个标示符值的持久化实例,如果存在直接返;如果不存在,就检查二级缓存中是否存在,如果有就直接返回,如果不存在,就从数据库表中获取数据返回如果数据库表中也没有,就直接返回null。
Public Object load(Class clazz,Serializable id)throw HibernateException:根据给定的OID返回一个持久化对象。Load方法先检验当前session 中否存在这个标示符值的持久化实例,如果存在直接返;如果不存在,就检查二级缓存中是否存在,如果有就直接返回,如果不存在,Hibernate框架不检查数据库是否存在这个标识符的记录,而是直接创建一个代理对象并返回,这个代理对象只包含标识符值,并没有其他属性的实际数据。这种方式就是常说的延迟加载(懒加载)。当这个标识符值对应实例的其他属性数据时,Hibernate才会从数据库中获取数据,所以必须保证这个操作是在当前Session未关闭时进行。如果此时发现数据库表中也不存在指定的标识符对应的行,就会抛出ObjectNotFoundException异常。
Public void delete(Object object)throws HibernateException:把指定的持久化实例转变成瞬时状态,并从数据库表中移除对应的记录。
1、 如果传入的实例是持久化状态的,Session就计划执行一个delete语句。
2、 如果传入的实例是脱管状态的,就先让它和当前Session关联转变为持久化对象,再计划执行一个delete语句。
Public void update(Object object)throws HibernateException:重复脱管对象,并把它的状态更新到数据库表中。
1、 把托管对象加入到当前Session缓存中,使他变为持久化对象。
2、 计划执行一个update语句。只有当前Session清理缓存时,才会执行SQL update语句。
Public void saveOrUpdate(Object obj)throws HibernateException:同时具有save()和update()的功能。
Public Object merge(Object object)throws HibernateException:将给定实例的状态复制到具有相同标识符的持久化实例上,并返回这个持久化实例。
- Hibernate框架中Session的基本操作
- Hibernate中session的操作
- ssh学习:hibernate中 Session缓存及基本操作
- Hibernate中Session的操作解释
- Hibernate中Session的操作解释
- Hibernate中Session的操作解释
- Hibernate中Session的操作解释
- Hibernate中Session的操作解释
- Hibernate中Session的操作解释
- Hibernate中Session的操作解释
- Session的基本操作
- hibernate中Session常见操作
- Hibernate 框架基本的数据库增删改查操作
- Hibernate中one-to-many的基本操作
- Hibernate中session的用法
- Hibernate中Session的管理
- hibernate 中session的总结
- Hibernate中session的使用
- 这就是飞秋下载早期的学习生涯
- 泛型增强
- 点点的思考
- 多对多关联
- 使用 Program Install & Uninstall Fixit 工具清理受损的 Windows\Installer
- Hibernate框架中Session的基本操作
- 一篇不错的讲解Java异常的文章(转载)
- Hibernate高级映射 --- 集合映射
- 《宝典总结1》
- COLLECTIONS
- 浅谈Android布局样式
- Hibernate高级映射 --- 集合映射
- 运动会报名系统(1)
- 漫水填充法