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

4 篇文章 0 订阅
4 篇文章 0 订阅

 

 

 

 

Save()与persist()方法区别

 

1.save()方法

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

2.persist()方法

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

也可以执行insert操作

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

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

 

 

 

Session的get与load方法区别

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

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

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

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

 

Update()

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

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

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

saveOrUpdate()

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

Java对象的OID为null

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

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

delete()

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

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

evict()

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值