Hibernate中session核心方法详解(一)

Hibernate 把对象分为 4 种状态: 持久化状态、临时状态、游离状态、 删除状态.。Session 的特定方法能使对象从一个状态转换到另一个状态.。

  • 临时对象(Transient): 
  1. 在使用代理主键的情况下, OID 通常为 null
  2. 不处于 Session 的缓存中
  3. 在数据库中没有对应的记录
  • 持久化对象(也叫”托管”)(Persist):
  1. OID 不为 null
  2. 位于 Session 缓存中
  3. 若在数据库中已经有和其对应的记录, 持久化对象和数据库中的相关记录对应
  4. Session 在 flush 缓存时, 会根据持久化对象的属性变化, 来同步更新数据库
  5. 在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化对象
  • 删除对象(Removed)
  1. 在数据库中没有和其 OID 对应的记录
  2. 不再处于 Session 缓存中
  3. 一般情况下, 应用程序不该再使用被删除的对象
  • 游离对象(也叫”脱管”) (Detached):
  1. OID 不为 null
  2. 不再处于 Session 缓存中
  3. 一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录
对象的状态转换图



接下里就是我们session的一些方法了

save:使一个临时对象转变为持久化对象,为持久化对象分配唯一的 OID,执行一条 insert 语句:在 flush 缓存的时候,在save方法之前设置的id无效,之后设置的id不能被修改(设置id 的话我这里注释了,自己可以去试下结果)

这里我附上图:


persist与save的区别:设置id的话,执行 persist() 方法时会抛出一个异常。这里我就不附图了,自己可以去看看

get:会立即加载对象(立即检索)如图:


若数据表没有对应的记录,则显示null(自己要去尝试下,这里我就不附图了)

load与get的区别:若不使用该对象,则不会立即执行查询操作,而返回一个代理对象(延迟检索)如图:



若数据表没有对应的记录,则会抛出异常

在需要初始化,代理对象之前已经关闭了 Session,load 方法可能会抛出 LazyInitializationException 异常 如图:(这里我关闭的是我注释的地方)


还有一些方法,等我学习完了再写。

Hibernate中session核心方法详解(二)链接:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值