`
ceci.lia
  • 浏览: 144293 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate Session方法小结

    博客分类:
  • Java
阅读更多
hibernate session中的load方法返回的一个POJO的代理对象,只有在访问其field时才进行实际的数据装载(向数据库发出一条select查询),如果该通过getter方法来访问其field值,但是session已经close,将抛出延迟初始化的异常。如果load加载的是一条不存在的数据,在该entity的field访问时,将抛出ObjectNotFoundException的异常。
对于session中的get方法,将会实时返回一个实际的POJO对象,而不是load中返回的代理对象。调用get时将立即发出select查询。对于不存在的数据记录,get将返回一个null值,在调用其方法时将产生NullPointerException。

hibernate session中的update方法用来更新对应的pojo对象到数据库中。update方法可以更新一个detached对象,前提条件是该detached对象必须包含id值,并且该update会更新该pojo对象中所有的值到数据库中(根据hbm文件中的配置)。update方法同时也可以更新一个persistence对象到数据库中,如果pojo对象已经是persistence对象(也就是已经存在于session的cache中),进行更新操作只需设置为对应的field值,甚至不需要调用update方法,在session关闭时会自动同步到数据库中。
hibernate中对于merge操作同样能达到持久化的目的,那么他和update方法有什么区别呢?merge方法在进行更新操作时,会首先判断该pojo对象是否是一个persistence对象,如果不是,那么他会首先根据id发出一条select查询,并将查询出的新对象加入到session的cache中,纳入session的生命周期管理中,然后再根据变化进行update。

对于update一个detached对象将导致的全盘update,就是所有在xml配置中的列都将进行update。可以通过在xml的class元素上设置dynamic-update属性和merge方法来避免所有列的update。merge由于merge方法将自动发出一条select查询来将detached对象纳入session的管理,所有对于大批量的操作可能将产生性能问题。建议使用update query来进行部分列的更新。这种特性在hibernate 3.3中才被加入到hibernate中。
1
1
分享到:
评论
2 楼 ceci.lia 2012-01-16  
nickphoenix 写道
引用
可以通过在xml的class元素上设置dynamic-update属性和merge方法来避免所有列的update。

为什么一定要用merge?我只配置了dynamic-update好像也可以.

因为对于detached对象,用update方法会出错。update方法要求实体对象必须是session管理的,也就是通过session的load或者get方法载入session中。merge方法对于detached对象会先进行get操作,将一个detached对象变成session管理的对象后,然后再进行update。这边是针对detached对象所以需要调用merge。
1 楼 nickphoenix 2012-01-12  
引用
可以通过在xml的class元素上设置dynamic-update属性和merge方法来避免所有列的update。

为什么一定要用merge?我只配置了dynamic-update好像也可以.

相关推荐

    hibernate 学习笔记小结

    ### Hibernate学习笔记小结 #### 一、简介与配置 **Hibernate** 是一款开源的对象关系映射(ORM)框架,它允许开发人员将Java对象自动持久化到数据库表中,从而简化了数据访问层的开发工作。在Spring框架中,...

    hibernate更新数据方法小结

    Session session=HibernateSessionFactory.getSession(); String sql=”from Usertable as user where user.username=?”; Query q=session.createQuery(sql); q.setString(0,username); List l=q.list(); Iterator...

    关于Clob类型在Hibernate中 的应用小结

    在Java世界中,尤其是在持久化框架Hibernate中,处理Clob类型的数据需要特别的方法和配置。 在Hibernate中,Clob类型的字段通常有两种处理方式: 1. **传统JDBC方式**: 在这种模式下,开发者需要直接操作Clob...

    Hibernate 框架总结

    首先,Hibernate框架的核心接口包括Session、SessionFactory、Configuration、Transaction以及Query和Criteria接口。这些接口构成了Hibernate框架的基础,并为开发人员提供了丰富的数据库操作能力。 - Session接口...

    Hibernate的框架的总结

    本文详细介绍了Hibernate框架中的核心配置文件`hibernate.cfg.xml`及其配置项、映射文件`xxx.hbm.xml`,以及核心API如Configuration和SessionFactory的使用方法,并对C3P0连接池进行了简要说明。通过这些内容的学习...

    hibernate小结

    ### Hibernate小结 #### 一、概述 在本篇文章中,我们将对Hibernate框架进行一个较为全面的小结。主要内容包括:Hibernate映射中的Lazy加载策略、Hibernate查询语言(HQL)的使用方法,以及一些基本配置与操作技巧...

    Struts2+Hibernate+Spring项目小结――Hibernate部分

    在Spring中,配置Hibernate的SessionFactory是至关重要的,因为它负责创建和管理与数据库交互的Session实例。有两种常见的配置方式: (1)使用配置文件和独立的Bean配置: 在这种方式下,`...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    hibernate各种常用方法的详解

    #### 六、小结 通过本文对 Hibernate 中常用方法的详细介绍,我们可以更好地理解和掌握 Hibernate 的工作原理及使用技巧。不同的方法适用于不同的场景,在实际开发过程中,根据具体需求选择合适的方法非常重要。...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    1.3 小结 19 1.4 思考题 19 第2章 Java对象持久化技术概述 21 业务数据在内存中表现为实体域对象形式,而在关系数据库中表现为关系数据形式。数据访问代码负责把实体域对象持久化到关系数据库中。 2.1 直接通过...

    关于Clob类型在Hibernate中 的应用小结-- 一篇使用心得.zip

    可以使用`session.save()`或`session.update()`方法,但在实际使用中,我们通常需要使用`session.merge()`,因为它能更好地处理持久化状态的变化。 4. **读取数据**:从数据库中检索Clob数据时,可以像处理普通属性...

    Hibernate实战(第2版 中文高清版)

     1.5 小结   第2章 启动项目   2.1 启动Hibernate项目   2.1.1 选择开发过程   2.1.2 建立项目   2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2 启动Java Persistence项目   2.2.1 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    hibernate一些文档资料

    ### 小结 通过上述内容的学习,我们可以了解到Hibernate作为一种优秀的ORM框架,在简化Java应用与数据库之间的交互方面发挥了重要作用。它不仅提高了开发效率,还降低了维护成本。无论是对于初学者还是经验丰富的...

Global site tag (gtag.js) - Google Analytics