`
linbzh
  • 浏览: 71368 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate持久化对象操作

阅读更多

闲着没事做,整理了hibernate持久化对象操作相关内容,供大家参考。

 

一、由session缓存清理操作引起的问题
(一)session在一下不同的情况下进行清理操作:
1、在查询执行之前,如果发现缓存中的持久化对象属性发生了变化,session会先执行清理,保证查询的数据不脏数据。
2、在调用事务提交commit()的时候,commit()方法先清理缓存,然后再向数据库提交事务
3、调用session.flush()的时候,(与commit不同的是,flush()只是执行清理工作)。
(二)session执行清理sql语句的顺序
1、所有对持久对象进行插入的语句,其顺序按照调用session.save()的顺序;
2、所有对持久对象进行更新的语句;
3、所有进行集合删除的语句;
4、所有对集合元素进行删除、更新或插入的语句;
5、所有进行集合插入的语句;
6、所有对实体进行删除的语句,其顺序按照对象执行session.delete()的时间顺序。
(三)3种控制清理的方式:FlushMode.COMMIT只在事务提交时清理,按照缓存顺序执行;FlushMode.AUTO默认方式进行清理(Hibernate的默认方式);lushMode.NEVER调用flush()方法时清理。通过session.setFlushMode()方法设定。
(四)引起的问题一,在执行事务提交前清除了相应的缓存数据。
session.evict(obj);transaction.commit();解决方法是在evict()前面加上flush()方法,或者把evict()放在commit()后面。
(五)引起的问题二,数据冲突
A a = new A();
a.setName("a");
session.save(a);
a.setName("b");
session.update(a);
A a1 = new A();
a1.setName("a");
session.save(a1);
session.flush();
由于session执行清理sql语句的顺序,先执行全部的插入语句,所以先执行了save(a)和save(a1)缓存的数据,再执行update(a)缓存的数据。解决方法是再update(a)后加上flush()函数或者采用FlushMode.COMMIT清理方式。

 

二、save()函数
save()函数放在对持久化对象设置属性函数前,会多出update语句,例如
session.save(obj);
obj.setName("a");//对持久化对象的属性进行修改
会多出update A set name=? where id=?的语句,导致额外的开销。

 

三、get()和load()函数
1、load()函数可以利用二级缓存,而get()不行;
2、如果没有匹配的记录,load()会抛出异常,get()不会;

 

四、update()函数
update()函数的作用就是将脱管对象重新和Session进行关联,转换为持久对象,通知session生成一条UPDATE语句同步数据库,因为对脱管对象属性的修改不能反映到数据库中。并非与spring里面getHibernateTemplate().update()函数相同。
用update()把脱管对象重新session关联时,如果该session已经有了相同对象标识符的持久对象,就会抛出异常。除非在<class>节点配置属性select-before-update="true",这样就会在update操作时生成一条select语句将数据库记录与需要更新的对象属性进行比较。不过对于经常更新的记录来说,配置该属性,在每次更新都会生成一条select语句,会降低应用程序的性能。

 

五、lock()函数
lock()方法用处:用于版本检查;升级锁为悲观锁(lock(obj,LockMade.READ));重新把游离实例于一个session实例相关联。
在执行lock方法时,会立即使用查询语句select查询版本号进行版本检查,不会执行一个update操作。而在执行update()方法时,并不会进行版本检查,直到执行flush方法,会先进行版本检查,在进行更新操作。

六、delete()、saveOrUpdate()函数

分享到:
评论

相关推荐

    Hibernate操作持久化对象

    Hibernate 操作持久化对象是Java开发中用于简化数据库交互的重要工具。它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM...

    Hibernate 操纵持久化对象

    **标题:Hibernate 操纵持久化对象** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本篇将详细讲解如何使用Hibernate来操纵持久化对象,这对于深入理解...

    Hibernate持久化对象的生命周期

    此外,Hibernate提供了级联操作,允许一个持久化对象的操作影响与其关联的其他对象。例如,如果一个持久化对象包含一个临时对象,并且配置了级联保存,那么在Session清理时,这个临时对象也会被保存到数据库并变为...

    hibernate持久化对象生命周期[参照].pdf

    本文将深入探讨Hibernate中的持久化对象生命周期,包括瞬时对象、持久化对象和游离对象的状态转换及其特性。 1. 瞬时对象(Transient Objects) 瞬时对象是指通过`new`操作符创建但尚未与数据库记录关联的Java对象...

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

    4. **HQL(Hibernate Query Language)**:面向对象的查询语言,类似于SQL,但更接近Java的语法,用于检索和操作持久化对象。 5. **第二级缓存**:Hibernate支持查询结果的缓存,可以显著提高系统性能,特别是对于...

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

    3. **Session和Transaction管理**:讲解Hibernate的Session接口,它是与数据库交互的主要接口,负责对象的持久化操作。同时,还会涉及事务管理,包括如何开启、提交、回滚事务,确保数据的一致性。 4. **查询语言...

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

    在Hibernate中,实体类代表数据库表,实体类的实例对应表中的记录,属性对应字段,这样就将复杂的SQL操作转化为简单的对象操作。 其次,书中详细讲解了Hibernate的配置。这包括了Hibernate的XML配置文件(hibernate...

    精通hibernate持久化对象技术.pdf

    ### 精通Hibernate持久化对象技术 #### Hibernate概述 Hibernate是一种开源的对象关系映射(Object Relational Mapping,ORM)框架,它为Java应用程序提供了一种简单、灵活的方式来与数据库进行交互。通过...

    hibernate持久化技术详解.孙卫琴.代码2

    **hibernate持久化技术详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的强大工具。通过Hibernate,开发者可以将数据库操作转化为对Java对象的操作,大大降低了...

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

    总之,《精通Hibernate:Java持久化对象技术详解[第二版]》是Java开发者提升数据库操作技能,深入了解ORM技术的重要参考资料。通过学习本书,读者不仅可以熟练掌握Hibernate的使用,还能了解到如何在实际项目中优化...

    精通Hibernate:java对象持久化技术

    【精通Hibernate:Java对象持久化技术】主要涵盖了Java应用程序的分层体系结构、软件模型以及对象持久化的概念,特别是如何使用Hibernate这一ORM框架进行持久化操作。以下是详细的知识点解析: 1. **应用程序分层...

    Hibernate数据持久化技术

    在JDO中,首先需要编写POJO,然后通过一个名为Enhancer的工具在编译后阶段对POJO的字节码进行增强,生成对应的持久化对象。这意味着JDO的转换过程发生在编译期间,而Hibernate的转换是在运行时。 Hibernate的优点...

    Java 精通Hibernate对象持久化技术权威指南

    《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...

    Hibernate 数据持久化

    总结来说,Hibernate的数据持久化机制是通过ORM技术将Java对象与数据库表进行绑定,使得开发者可以通过简单的对象操作实现对数据库的复杂操作。理解并熟练运用Hibernate,不仅可以提高开发效率,还能使应用程序更加...

    利用 hibernate对象持久化服务简化数据库访问

    #### 持久化对象属性的访问机制 每种持久化机制都有其特有的访问方式。例如,EJB 使用 Bean 层接口,JDO 使用 PersistenceManager,而 Hibernate 则采用了 session 接口。Hibernate 使用 session 接口,在系统启动...

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

     8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  8.4.1 Session的save()和persist()...

    hibernate:java持久化对象详解02

    本教程“hibernate:java持久化对象详解02”是系列教程的一部分,它将继续深入探讨Java中的持久化对象与Hibernate的使用方法。在开始之前,建议先学习“hibernate:java持久化对象详解01”,以确保对基础概念有清晰的...

    Hibernate 对象持久化

    总结来说,Hibernate对象持久化是Java开发中的重要技术,它通过简化数据库操作,提高了开发效率,使得开发者可以更加关注业务逻辑,而不是繁琐的SQL语句。通过北大青鸟的教材,你可以系统地学习并掌握这一关键技术。

    精通Hibernate:Java对象持久化技术详解(第2版)源码1

    通过这些章节的学习,读者不仅可以理解Hibernate的工作原理,还能熟练运用它来实现Java对象的持久化,从而提升数据库操作的效率和便捷性。每章的源码实例将帮助读者更好地理解和实践这些理论知识。

    深入理解持久化对象

    #### Hibernate与持久化对象 Hibernate作为一款优秀的Java持久层框架,其设计理念强调低侵入性,这意味着在开发过程中,可以使用标准的Java对象(POJO)进行编程,无需让POJO继承特定的超类或者实现特定的接口。...

Global site tag (gtag.js) - Google Analytics