`
jianchen
  • 浏览: 340637 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate学习之第四篇(对象状态)

阅读更多

session 的几个主要方法:
1,save方法和persist方法的区别;
2,delete,删除对象
3,update,更新对象,如果数据库中没有记录,会出现异常。
4,get,根据ID查,会立刻访问数据库。
5,load,根据ID查,(返回的是代理,不会立即访问数据库)
6,saveOrUpdate,merge(根据id和version的值来确定是save还是update),调用merge你的对象还是脱管的。
7,lock(把对象变成持久对象,但不会同步对象的状态)
8,flush 把缓存中的数据刷新到数据库。

Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。
其区别在于:
1,如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
2,Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
3,load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据库读取。


补充:load的懒加载的理解,见后面部分。

对于和ibernate而言,对象有三种状态:瞬时对象,持久对象,游离对象或脱管对象
1.瞬时(transient):数据库中没有数据与之对应,超过作用域会被jvm的垃圾收集器回收,一般是new出来且与session没有关联的对象
2.持久(persistent):数据库中有数据与之对应,当前session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到 )。
3,脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到。

 

  Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        session.save(user);
        user.setUserName("new name");
        tx.commit();
        System.out.println("end");
 

上例中,在session.save(user)执行后,user就是持久对象(数据库中有记录了同时和session关联,接受hibernate的管理),所以下一句user修改自己的属性,它的动作被hibernate检测到,在事务提交时能够同步更新到数据库中去。在执行过程中,hibernate执行两个动作:

Hibernate: insert into user (userName, birthday, id) values (?, ?, ?)
Hibernate: update user set userName=?, birthday=? where id=?

 

既然如此,对象的更新能够自动被监测执行,那么session对象的update方法岂不是英雄无用武之地了?其实不然,当一个对象处于游离状态时,可以调用session的update方法,手动地把信息更新到数据库中去。

再者,有时候你接受传过来的一个对象,你有时候并不知道该对象是瞬时的还是脱管的,那么该怎么办呢?这是就可以调用session对象的saveOrUpdate方法。hibernate内部可以根据对象的id的值来判断对象的状态,id无值则为瞬时对象,有值说明是脱管对象,从而执行相应的动作。调用了saveOrUpdate方法,对象的状态变为持久,而使用merge方法(功能和saveOrUpdate差不多),对象的状态变为脱管。

对象的状态转化图如下:

 

  • 大小: 26 KB
分享到:
评论

相关推荐

    Hibernate学习笔记整理

    4. 第四步 Hibernate 中的类型 * Java Type * Hibernate Type Hibernate 类型 * Java Type:Hibernate 内部直接提供了 Java 类型到数据库的对照表 * Hibernate Type:需要查找该 Hibernate 类型对应的 Java 类型...

    Hibernate学习笔记特别详细

    持久对象有四个状态:瞬时态、持久态、脱管态和临时态。理解这些状态对于掌握Hibernate的事务管理至关重要。 005---Query接口初步 Query接口提供了执行HQL(Hibernate Query Language)和SQL查询的功能。HQL是面向...

    Hibernate学习.pdf

    - **自动状态检测**: Hibernate能够自动检测对象的状态变化。 - **删除持久对象**: 使用Session的delete方法删除对象。 #### 10. 事务与并发 - **事务**: 控制数据一致性的重要手段。 - **并发**: 处理多个用户...

    Hibernate Session 4种对象状态.docx

    理解Hibernate的对象状态对于有效地进行数据库操作至关重要。正确管理对象状态可以避免数据丢失、重复插入或其他数据库一致性问题。在开发过程中,应该注意何时创建、保存、更新和删除对象,以及它们与Session的关系...

    hibernate源码的学习

    二、对象状态与持久化 1.瞬时状态:Java对象刚被创建,尚未与Session关联。 2.持久化状态:对象通过Session的save()或persist()方法被管理,与数据库中的记录对应。 3.托管状态:对象已由Session的load()或get()方法...

    精通Hibernate:Java对象持久化详解.zip

    在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...

    hibernate学习源代码祝你提高

    通过深入研究这个 Hibernate 3.x 的源代码,你可以了解到其内部的工作流程,比如对象状态管理、查询解析、SQL 生成等,这将有助于提升你的编程技巧和解决问题的能力。同时,熟悉 Hibernate 的最佳实践,可以帮助你在...

    Hibernate DOC中文文档(学习Hibernate必备手册)

    《Hibernate DOC中文文档》是学习Hibernate框架的重要参考资料,它详细阐述了Hibernate的核心概念、配置、对象关系映射(ORM)以及各种操作技巧。对于初学者和有经验的开发者来说,这份文档都是掌握Hibernate不可或...

    精通Hibernate:Java持久化对象技术详解[第二版]

    8. **实体生命周期**:详解Hibernate对对象状态的管理,包括瞬时态、持久态、游离态和脱管态,以及对象状态转换和事件监听器。 9. **多态和继承映射**:讲解如何处理类的继承关系,实现多态查询,包括单表继承、...

    精通Hibernate:Java对象持久化技术详解

    在Java应用开发中,对象持久化是一个关键环节,它涉及将程序中的对象状态存储到持久化介质(如关系型数据库)中,并在需要时恢复这些状态。Hibernate作为ORM(对象关系映射)框架,通过提供一种面向对象的方式来处理...

    hibernate学习资料

    4. **会话(Session)**:Hibernate的会话是与数据库交互的主要接口,用于管理对象的状态。它提供了一种事务性的边界,并且可以实现透明的缓存。 5. **查询语言(HQL)**:Hibernate Query Language,类似于SQL,但...

    Hibernate学习笔记第二部分

    4. **持久化(Persistence)**: 通过Hibernate,对象可以被持久化,即对象的状态会被保存到数据库中。这通过Session接口实现,包括save()、saveOrUpdate()、persist()等方法。 5. **会话(Session)**: Session是...

    hibernate API帮助文档 及hibernate学习笔记

    这篇文档和学习笔记将深入介绍Hibernate的核心概念、API用法以及最佳实践。 1. **Hibernate核心概念** - **对象关系映射(ORM)**: Hibernate是ORM的一种实现,它允许开发者使用面向对象的方式来操作数据库,而...

    精通hibernate3.0(第三版).rar

    1. Hibernate基本概念:介绍Hibernate的核心思想,如实体、持久化类、对象状态管理、事务处理等,帮助初学者建立对ORM框架的基本认识。 2. Hibernate配置:讲解如何配置Hibernate的XML文件,包括hibernate.cfg.xml...

    Hibernate中文参考文档学习

    Hibernate是一款开源的对象关系映射(ORM)框架,它允许Java开发者在Java对象和数据库记录之间建立映射,从而简化数据库编程。在这个“Hibernate中文参考文档学习”中,我们可以深入理解Hibernate的核心概念、配置、...

    最经典的hibernate教程_从入门到精通(全四篇)

    本教程的【第一篇】将介绍Hibernate的基础知识和基本操作,【第二篇】会深入到关联映射和查询,【第三篇】涵盖性能优化和扩展性,而【第四篇】则聚焦于实际项目中的应用和问题解决。通过这四篇内容的学习,你将能够...

    经典hibernate教程_从入门到精通 共四篇

    在第二篇中,我们将深入学习Hibernate的核心功能,如对象状态管理、事务处理和缓存机制。我们将了解Hibernate的持久化模型,包括瞬时态、持久态和脱管态。同时,我们将学习如何使用Hibernate的事务API来确保数据的...

    hibernate学习必备资料

    Hibernate将对象分为瞬时态、持久态、游离态三种状态,理解对象状态有助于理解Hibernate的工作原理。例如,当一个对象被Session管理时,它处于持久态,其变更会被自动同步到数据库。 六、CRUD操作 Hibernate提供了...

    Hibernate学习书籍

    在Hibernate中,核心概念包括实体(Entities)、持久化类(Persistent Classes)、对象状态(Object States)、会话(Session)以及查询语言(HQL)。实体是与数据库表相对应的Java类,持久化类则是具有ORM注解的...

Global site tag (gtag.js) - Google Analytics