hibernate_sesison核心方法

在了解hibernate_sesison核心方法之前,首先了解一下hibernate持久化对象状态,再根据持久化对象状态的转变,讲解核心方法。

hibernate持久化对象状态:持久化状态、临时状态、游离状态、删除状态。session的特定方法能使对象从一个状态转换到另一个状态。

临时对象(Transient):

—使用代理主键的情况下,OID通常为null;

—不处于session的缓存中;

—在数据库中没有对应的记录;

持久化对象(也叫“托管”)(Persist):

—OID不为null;

—位于session缓存中;

—若在数据库中有已经有和其对应的记录,持久化对象和数据库中的相关记录对应;

—session在flush缓存时,会根据持久化对象的属性变化,来同步更新数据库;
—在同一个session实例缓存中,数据库表中的每条记录只对应唯一的持久化对象;

删除对象(Removed):

—在数据库中没有和其OID对应的记录;

—不再处于session缓存中;
— 一般情况下应用程序不该再使用被删除的对象;

游离对象(也叫“脱管‘)(Detached):

—OID不为null;

—不处于session缓存中;

— 一般情况下,游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录;





下面就来了解一下hibernate_session的核心方法:

save():

1)使一个临时对象变为持久化对象;

2)为对象分配id;

3)在flush缓存时会发送一条insert语句;

4)在save()方法之前的id是无效的;

5)持久化对象的id是不能被修改的;


persist():

1)也会执行insert操作;

2)和save()方法的区别:在调用persist()方法之前,若对象已经有id了,则不会执行insert操作,而会抛出异常;


get() 和load():

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

get()是立即加载,load()是延迟加载;

2)若数据表中没有对应的记录,且session也没有被关闭,同时需要使用对象时,get()返回null,load()若不使用该对象任何属性,没问题;若需要初始化了,抛出异常;

3)load()方法可能会抛出LazyInitialzationException异常(在需要初始化代理对象之前已经关闭了session);


update():

1)若更新一个持久化对象,不需要显示的调用update()方法,因为在调用Transaction的commit()方法之前,会先执行session的flush()方法;

2)更新一个游离对象,需要显示的调用session的update()方法,可以把一个游离对象变为一个持久化对象;

需要注意的:

1、无论要更新的游离对象和数据表中的记录是否一致,都会发送UPDATE语句。

如何让update()方法不再盲目的触发update语句?在.hbm.xml文件的class节点设置select-before-update=true(默认为false),但通常不需要设置该属性。

2、若数据表中没有对应的记录,但还调用了update()方法,会抛出异常。

3、当update()关联一个游离对象时,如果session的缓存中已经存在相同OID的持久化对象时,会抛出异常,因为在session的缓存中不能有两个OID相同的对象。


saveOrUpdate():

1)当对象为临时对象,会执行save()方法,否则会执行update()方法。

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

2、了解:OID值等于.hbm.xml文件的中id标签的unsave-value属性值得对象,也被认为是一个临时对象,会执行save()方法。


delete():

1)执行删除操作,只要OID和数据表中的一条记录对应,就会执行delete操作,若没有对应的记录,则会抛出异常(可以通过设置hibernate配置文件hibernate.user_identifier_rollback为true,使删除对象后,把其OID置为null,把对象变为临时对象,一般不使用)。


evict():

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值