hibernate深度学习 游离状态 HQL

本文详细介绍了Hibernate中对象的四种状态——临时、持久化、游离和删除,重点讨论了游离状态的特性和转换。此外,文章还讲解了如何使用Session的方法如save(), update(), saveOrUpdate(), get()和load()来操纵对象状态,并探讨了HQL的使用,包括DML操作和参数查询。最后提到了Hibernate中HQL与SQL的差异及其在映射文件中的配置方法。" 80873300,7452767,神经网络入门实践:构建多层前向传播网络,"['深度学习', 'Python编程', '机器学习', '神经网络基础']
摘要由CSDN通过智能技术生成

当我学完这个之后 我仿佛都懂了 = =或许这就是 hibernate的力量吧.
操纵持久化对象(Session)
1.1. 在hibernate中java对象的状态

Hibernate 把对象分为 4 种状态:

¨ 持久化状态,

¨ 临时状态,

¨ 游离状态,

¨ 删除状态.

Session 的特定方法能使对象从一个状态转换到另一个状态

1.2. 临时对象(transient)

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

¨ 不处于 Session 的缓存中

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

1.2.1. 删除对象(Removed)

¨ OID 不为 null

¨ 从一个 Session实例的缓存中删除

¨ Session 已经计划将其从数据库删除, Session 在清理缓存时, 会执行 SQL delete 语句, 删除数据库中的对应记录

¨ 一般情况下, 应用程序不该再使用被删除的对象

1.2.2. 持久化对象(也叫”托管”)(Persist)
1.2.3.

¨ OID 不为 null

¨ 位于 Session 缓存中

¨ 持久化对象和数据库中的相关记录对应

¨ Session 在清理缓存时, 会根据持久化对象的属性变化, 来同步更新数据库

¨ 在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化对象

1.2.4. 游离对象(也叫”脱管”)(Detached)

¨ OID 不为 null

¨ 不再处于 Session 的缓存中

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

1.2.5. 对象的状态转换说明(图)

对象的状态转换图

测试hibernate中java对象的状态

程序代码

生命周期

状态

tx = session.beginTransaction();

Customer c = new Customer);

开始生命周期

临时状态

Session.save(c)

处于生命周期中

转变为持久化状态

Long id=c.getId();

c = null;

Customer c2 = (Customer)session.load(Customer.class,id);

tx.commit();

处于生命周期中

处于持久化状态

session.close();

处于生命周期中

转变为游离态

c2.getName();

处于生命周期中

处于游离态

c2 = null;

结束生命周期

结束生命周期

1.2.6. 对象的状态总结

Session缓存存在对应的记录

数据中存在对应的记录

临时态

no

no

持久态

yes

可能有也可能没有

游离态

no

可能有(数据没有删除)也可能没有

1.2.7. 操纵持久化对象的方法(Session中)
1.2.8. save()

Session 的 save() 方法使一个临时对象转变为持久化对象。

¨ Session 的 save() 方法完成以下操作:

把 News 对象加入到 Session 缓存中, 使它进入持久化状态
选用映射文件指定的标识符生成器, 为持久化对象分配唯一的 OID. 在使用代理主键的情况下, setId() 方法为 News 对象设置 OID 使无效的.
计划执行一条 insert 语句,把Customer对象当前的属性值组装到insert语句中

¨ Hibernate 通过持久化对象的 OID 来维持它和数据库相关记录的对应关系. 当 News 对象处于持久化状态时, 不允许程序随意修改它的 ID

@Test

public void save() throws Exception{



   Session session = sessionFactory.openSession();



   Transaction tc = null;

   User user = null;

   try {

       tc = session.beginTransaction();

       user = new User();//临时状态

       user.setName("张张");

       session.save(user);//持久化状态

       tc.commit();

   } catch (Exception e) {

       tc.rollback();

       throw e;

   }finally{

       session.close();

   }

   user.setName("王王");//游离状态

   System.out.println(user.getName());



}

1.2.9. update()

Session 的 update() 方法使一个游离对象转变为持久化对象, 并且计划执行一条 update 语句。

@Test

public void update() throws Exception{



   Session session = sessionFactory.openSession();



   Transaction tc = null;

   User user = null;

   try {

       tc = session.beginTransaction();

       user = (User) session.get(User.class, 1);

       //session.clear();

       //session.evict(user);//清楚某一个对象。

       user.setName("冯芬1");



       //session.update(user);//执
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值