hibernate 三种状态

hibernate的三种状态:transient(临时)、persistent(持久)和detach(游离)。

transient:最初new出来的实体类bean的对象,没有经过其他操作,例save,saveOrUpdate。

例:User user = new User();

         user.setId(1);

如果此时数据库没有Id为1 的数据,此时的状态就为transient。依次为例,通过save可以将transient状态转化为persistent状态。

例:session.save(user);

PS:这个地方和有一次在测试的时候,将save方法删除之后无法操作数据一样。

 

detach:与transient状态很像,不同的地方在于new出来的对象,通过set在数据库存在这么一条数据:

例:User user = new User();

         user.setId(1);

在数据库表中存在一条Id为1的数据。

 

persistent:

transient->persistent:一般情况下,这种转换只有一种方式,使用save方法。至于saveOrUpdate这个方法实际上实现的也是save。

saveOrUpdate说明:如果存在当前Id的数据,执行update;否则执行save。

此时的persistent状态,在session.save(user)之后仅就可以实现update、load操作,而且load操作不存在SQL语句。

例:User user = new User();

         user.setId(1);

         user.setName(“111”);

         session.save(user);

         user=(User)session.load(User.class,u);

         session.getTransaction.commit();

这个只会出现一条插入SQL,不会出现查询SQL。因为save方法只是将数据存入到缓存之中,还没有提交到数据库。个人感觉很有意思。

detach->persistent:这种转换方式,可以使用load、update。因为detach为离线状态,在数据库原本就是存在的,所以是不可以进行save操作的。

 

至于其他,通过图就可以看清楚。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值