Hibernate持久化对象

Hibernate对象状态:
(1),瞬时(Transient)状态
瞬时状态对象值由new操作符创建,且尚未与Hibernate Session关联的对象(即该对象尚未被Session对象的save()、update()等方法持久化到数据库中去)
(2),持久(Persistent)状态
持久状态对象指与数据库表中的某一条记录相对应,已经获取持久化标志符的对象。持久化对象可能是刚刚刚被保存的(save()方法)或者刚刚被加载的(load()方法),无论哪一种情况,它仍存在于相关联的session作用范围内,也就是Session仍然可以对持久对象进行操作。
(3),脱管(Detached)状态
脱管状态指在Session作用范围之外的持久对象,与持久对象关联的Session被关闭之后,对象由持久状态变为脱管状态,脱管状态仍然可以被继续修改,如果重新关联到某个新的Session上,会再次转变为持久对象,同时所有修改将被持久化到数据库

Cat.java

class Cat
{
private Long id;
private Date birthdate;
private Color color;
private char sex;
private float weight;

}

Session方法介绍
1,save()方法,功能是使瞬时状态持久化。
2,load() 和get()方法,根据某个对象的持久化标志符来获取该对象
  Cat cat=(Cat)session.load(Cat.class.new Long(1));
  Cat cat1 = new Cat();//
  session.load(cat,new Long(1));
3,update()方法
  使脱管对象持久化。
4,savaOrUpdate()方法

  既能保存瞬时对象又可更新/重新关联脱管对象。

5,delete()方法

  从数据库中删除与对象相对应的记录。

  session.delete(cat);

Session的缓存

  可以理解为一个Hibernate应用中处于持久状态对象的集合,类似于计算机体系结构中的Cache。当Session的load()方法试图从数据库中加载某个对象时,Session首先会判断在缓存中是否已经存在这个对象了,(判断的标准是持久化标志符),如存在就不需要再到数据库中进行检索。

Sssion的缓存清空是指将缓存内的持久化对象进行清除,持久对象在 缓存清空之后编结束其生命周期,一般在调用Session的close() 、clear()方法进行缓存的清空。

Session的缓存清理是指每隔一段时间,Session执行一些必需的SQL语句将内存中的对象的状态同步到JDBC连接中,一般默认在调用org.hibernate.Transaction.commit()方法、Session的flush()方法以及执行某些查询时,进行缓存的清理。

Transaction的commit()方法会首先调用fulsh方法,然后将事务提交。

持久化对象的级联操作

cascase这个属性的设置来实现Hibernate中的级联操作。如班级和学生,如果一个班级被删除,与之关联的所有学生对象也删除。

Hibernate的缓存 

分为Session的缓存和SessionFactory的缓存。Session的缓存是内置的无法被卸载,通常被称为Hibernate的一级缓存,SessionFactory的缓存分为内置和外置,SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,SessionFactory对象的一些结婚属性包含的数据,存放了映射元素和预定义的SQL语句,其中映射元数据时映射文件中数据的拷贝,预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来的。

SessionFactory的外置缓存是一个可配置的插件,在默认情况下不启用这个插件,也被称为Hibernate的二级缓存。存储的介质可以是内存或者硬盘。

持久化层的缓存的范围

从缓存访问主题的角度来讲,一般会有三类角色会对缓存内的数据进行访问:事务、进程、集群。

事务是原子的,进程可以有多个事务构成,这些事务可以并发访问数据对象。集群是由一个或多个机器的进程构成,数据对象将被复制到集群环境中的每个进程节点。

持久化层的缓存的并发访问策略

在进程范围或集群范围的缓存(二级缓存),会出现并发问题,设定以下四种类型的并发访问策略。每一种策略对应一种事务隔离级别:

*事务型:“可重复读”的事务隔离级别。在受管理环境中适用。防止脏读和不可重复读这类的并发问题。

*读写型:“读已提交数据”的事务隔离级别,在非集群环境中使用,对于经常被读但很少修改的数据,可以采用这种隔离类型。防止脏读。

*非严格读写型:不保证缓存与数据库中数据的一致性。

*只读型:对于从来不修改的数据。

原文地址:https://www.cnblogs.com/happinessqi/p/3496515.html