Session接口中方法简介

Java对象在hibernate持久化层的状态:

临时态:不被session关联,在数据库中没有相应的记录

持久态:被session关联,在数据库中有对应的记录

删除态:不被session关联,并且session已经计划从数据库中删除

游离态:不被session关联,在数据库中有对应的记录

Session接口详细用法:

save():

1、         用于保存临时态对象,是得临时对象处于持久态。若用于保存持久态对象是多余的,用于保存游离态对象将在数据库中保存两条完全一样的数据,显然这是不合理的。

2、         最佳实践:应先设置临时对象的状态,再保存临时对象,否则将产生多余的update语句。

3、         持久态对象的主键不允许被随意修改,否则将报异常。最佳实践,在使用代理主键的前提下,无论对象处于4个状态的哪个状态下程序都不应该OID,因此应该将setId( )设置成为private的。

persist():

1、         persist与save的区别是,不会为持久化对象立即分配OID,而是要等到清理内存的时候。

2、         对于persist方法,在事务边界以外执行,该方法不会计划执行insert语句,而对于save方法,无论是在事务边界以外还是在事务内调用它,都立即执行insert语句。

load( )&get():

1、         当数据库中不存在要查询的记录时,load返回ObjectNotFoundException(因为load使用了代理,无论记录存在与否先用代理类构建它的实例),而get返回null。

2、         如果要访问一个对象的各个属性,可以通过get方法获得;

3、         如果只是为了创建对象之间的关联或是删除对象那么可以考虑用load方法,因为load方法默认是使用延迟加载的,构造代理类不访问数据库。

update():

1、         使游离态对象变为持久态对象,并且计划执行一条update语句。

2、         session只有在清理缓存的时候才执行update语句,并且在执行的时候才会把对象的当前属性封装到update语句中,因此程序多次修改对象的属性,在清理缓存的时候只会执行一次update语句。

3、         通过session.update使得游离对象与一个session关联,即使没有修改对象的属性,session在清理缓存的时候也会执行有update()方法计划执行的update语句,可以配置select-before-update语句做判断。

saveOrupdate( ):如果传入的参数是临时对象,则执行save;如果是游离对象则执行update。

merge( ):

1、         引入该方法的背景,用session的update关联一个对象的时候,若缓存中已经存在了同类型并且OID相同的对象,就会报错。

2、         执行merge方法,会将游离态对象的属性赋值到持久态对象中。

delete( ):删除游离态对象或是持久态对象,若删除的是游离态对象,先将对象变为持久态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值