hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

 

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

 

 

 

Save()与persist()方法区别

 

1.save()方法

使一个临时对象变为持久化对象,为对象分配id,在flush缓存时,会发送一条insert语句,在save()方法之前id设置是无效的,持久化对象的id是不能被修改的

2.persist()方法

在persist方法之前,若对象已经有id了,则不会执行insert,而抛出异常

也可以执行insert操作

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

在save()方法之前设置id,无反应不报错,之后设置会产生报错

在pesist()方法之前设置id ,直接抛出异常,也报错

 

 

 

Session的get与load方法区别

1.Get方法:会立即加载对象,而执行load方法,若不使用该对象,则不会立即执行查询操作,而返回一个代理对象

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

Get是立即检索 Load使用的是延迟检索

2.若数据表中无记录,get返回null ,load在使用到对象(需要初始化了)的时候就报错(仅使用session.load无所谓)

3. load可能会抛出懒加载异常 在需要初始化代理对象之前已经关闭了session

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

 

Update()

  1. 若需要更新一个持久化对象,不需要显示的调用update方法,因为在调用Transaction的commit()方法时,会先执行session.flush()
  2. 更新一个游离对象需要显示 的调用update方法,可以把一个游离对象变成持久化对象,无论要更新的游离对象和数据表的记录是否一致 都会发送update语句

设置select-before-update=”true” ,但通常不需要设置该属性

  1. 若数据表中没有对应的记录,但还调用update方法,会抛出异常
  2. 如果在Session的缓存中已经存在相同OID的持久化对象,会抛出异常

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

saveOrUpdate()

判断对象 游离态还是临时对象(OID为null)

Java对象的OID为null

注意:1.若oid不为null,但数据表中没有和其对应的记录,会抛出一个异常

2.了解oid值等于id的unsaved-value 也被认为游离对象

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

delete()

执行删除操作,只要oid和数据表中一条记录对应,就会准备执行delete操作。

若oid在数据表中没有对应记录,则抛出异常'

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

evict()

从session缓存中把指定的持久化对象移除

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

hibernate中session的相关方法(save,persist get,load saveOrUpdate delete evict)

只有news2更新了,news1从session缓存中删除了