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

Hibernate三态的代码范例

阅读更多

hibernate 实体对象的生命周期主要分为三个状态,Transient(瞬态),Persistent(持久态),Detached(游离态)。

  1.Transient(瞬态) 表示该实体对象在内存中是自由的,也就是说和数据库没有任何关系。

  //创建一个瞬态对象

  User user = new User();

  user.setName(userName);

  user.setPassword("test");

  //user仍是一个瞬态对象

 

  2.Persistent(持久态) 是指该实体对象处于Hibernate框架所管理的状态,也就是说这个实体对象与session对象的实例相关。

    处于持久太的实体对象最大的特征是对其所做的任何变更操作都将被Hibernate持久化到数据库层。

  //创建一个瞬态对象

  User user = new User();

  user.setName(userName);

  user.setPassword("test");

  //user仍是一个瞬态对象

 

Session session = sessionFactory.openSession();

Tansaction tx = session.beginTansaction();

//此时user仍是一个瞬态对象

session.save(user);

//此时user已变为持久态

tx.commit();

 

Tansaction tx2 = session.beginTansaction();

user.setPassword("pdw");

tx2.commit();

//虽然在这个事物中并没有调用session的save()方法来保存user对象,但是usr处于持久太,

//所以对user对象所做的任何修改都持久化到数据库中   ---------持久态自动更新

//那么数据库中的密码也变成了pdw

 

session.close();

 

另一种方法直接得到持久态的对象:

 

Session session = sessionFactory.openSession();

Tansaction tx = session.beginTansaction();

User user = (User) session.load(User.class,"key");   ------相当于hql  从DB读出来的 当然是持久态

//user对象已是持久太对象

tx.commit();

session.close();

 

3.Detached(游离态)是指处于持久态的对象,当不再与他所对应的Session对象向关联时,这个对象就变成游离态了。

 

//创建一个瞬态对象

  User user = new User();

  user.setName(userName);

  user.setPassword("test");

  //user仍是一个瞬态对象

 

Session session = sessionFactory.openSession();

Tansaction tx = session.beginTansaction();

//此时user仍是一个瞬态对象

session.save(user);

//此时user已变为持久态

tx.commit();

session.close();      clear()   evict()  3种变游离态

user对象已经变成游离态

 

session close完后,对象就变成游离态。

 

 

update():

一个PO脱离Session之后,还能保持状态,再进入一个新的Session之后,就恢复状态管理的能力,但此时状态管理需要使用session.update()   新Session也不知道PO在外面做了哪些变化 一定要显式调用s.update()  通知Hibernate,cat对象已经修改了,你必须得赶快制作并发送update的sql了

 

saveOrUpdate()

 

public void addMate(Cat cat, Mate mate) {   //这里传来两个参数  cat需要cat.setMate()  

Session session = ...;                                       cat兴许是new出来传过来的 暂态(save)      

Transacton tx = ...;                                               兴许是DB查出来传过来的  游离态(update)

session.saveOrUpdate(cat); 

cat.addMate(mate); 

tx.commit(); 

session.close(); 

};

分享到:
评论

相关推荐

    Hibernate三态及简单实例

    Hibernate三态及简单实例,主要简单的使用Hibernate的CRUD,这是我学习Hibernate写的。跟大家分享下。

    Hibernate Quickly 源代码

    《Hibernate Quickly 源代码》是一份专注于Java持久层框架Hibernate的开源项目,它提供了快速理解和应用Hibernate的实例。这份源代码集可以帮助开发者深入学习Hibernate的核心功能和最佳实践,包括对象关系映射(ORM...

    Hibernate tool 源代码

    《深入探索Hibernate Tool源代码:Eclipse Plugin与Code Generator解析》 Hibernate Tool是Java开发者们常用的工具,它基于Hibernate框架,提供了丰富的功能,包括数据库逆向工程、对象关系映射(ORM)代码自动生成...

    Hibernate3 源代码

    **Hibernate3 源代码详解** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过提供一种抽象层,Hibernate 允许开发人员使用面向对象的方式来处理数据,而无需直接...

    hibernATE的源代码

    从官方网站下载的Hibernate源代码,通常包含了最新的开发版本,这对于我们深入学习和调试Hibernate具有很高的价值。 在`hibernate-orm-master`这个压缩包中,我们可以找到以下关键部分: 1. **src/main/java**: 这...

    hibernate-3.2源代码

    在Hibernate中,对象有三种状态:瞬时态、持久态和脱管态。理解这些状态对于正确操作对象至关重要,例如,只有持久态对象才能参与事务。 六、缓存机制 Hibernate 3.2引入了二级缓存,通过CacheProvider实现,如...

    Spring+hibernate整合源代码

    这个“Spring+hibernate整合源代码”应该包含了实现上述整合步骤的示例代码,可以作为学习和参考的资源。通过学习和实践这些代码,你可以更好地理解和掌握 Spring 和 Hibernate 整合的细节,提升你的 Java Web 开发...

    hibernate入门代码(附有测试代码)

    本压缩包提供了一个基础的Hibernate入门示例,包括了必要的配置文件和测试代码,适合初学者学习理解Hibernate的工作原理。 1. **Hibernate概述** Hibernate是一个开源的ORM框架,它将Java类与数据库表进行映射,...

    JavaEE源代码 hibernate3

    JavaEE源代码 hibernate3JavaEE源代码 hibernate3JavaEE源代码 hibernate3JavaEE源代码 hibernate3JavaEE源代码 hibernate3JavaEE源代码 hibernate3JavaEE源代码 hibernate3JavaEE源代码 hibernate3JavaEE源代码 ...

    hibernate开发步骤代码(全)

    hibernate开发步骤代码(全),配置文件的配合和代码的书写都有

    Hibernate 源代码(非常好)

    Hibernate提供了第一级缓存(由`Session`管理)和第二级缓存(可选,通常由第三方插件如EhCache或Infinispan提供)。源代码中可以查看这些缓存的实现细节。 最后,Hibernate支持 Criteria API 和 HQL,它们是两种...

    精通Hibernate+源代码

    《精通Hibernate:Java对象持久化技术详解》是一本深度探讨Java对象持久化技术的专业书籍,主要聚焦于Hibernate框架的应用与实战。Hibernate作为Java领域中最流行的ORM(对象关系映射)框架,极大地简化了数据库操作...

    hibernate3.2.5源代码

    《深入剖析Hibernate 3.2.5源代码》 Hibernate是一个强大的对象关系映射(ORM)框架,它在Java开发中扮演着至关重要的角色。3.2.5版本是Hibernate历史上的一个重要里程碑,它提供了丰富的功能和稳定性。本文将深入...

    Hibernate入门(代码+笔记)

    **第三部分:Hibernate实体映射** 实体映射是Hibernate的核心功能,它定义了Java对象与数据库表之间的关系。你可以使用注解或XML配置文件来完成映射。例如,@Entity表示一个Java类是数据库表的映射,@Table指定对应...

    hibernate学习源代码祝你提高

    Hibernate 实体有三种状态:瞬时态、持久态和脱管态。理解这些状态及其转换对于正确管理和操作实体至关重要。 10. **一对多、多对一、多对多关联映射** Hibernate 支持多种关联映射,如一对一(@OneToOne)、一对...

    最简单Hibernate工程代码

    【标题】"最简单Hibernate工程代码"涉及到的是Java开发中的持久化框架Hibernate的入门级实践。Hibernate是一个强大的ORM(对象关系映射)框架,它允许开发者以面向对象的方式处理数据库操作,大大简化了数据库编程。...

    Hibernate 源代码及重要说明

    **Hibernate 源代码分析与重要概念** Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在Java应用中管理和持久化数据到关系数据库的方法。通过Hibernate,开发人员可以将数据库操作转化为...

    hibernate 3.1源代码

    这个压缩包包含了Hibernate 3.1版本的源代码,这对于深入理解其工作原理、自定义功能或者进行二次开发具有极高的价值。 首先,让我们来探讨一下Hibernate的核心概念。ORM是Hibernate的核心特性,它将Java对象与...

    hibernate代码自动生成

    而“Hibernate代码自动生成”则是指利用Hibernate的工具或者第三方库,自动生成与数据库表对应的Java实体类、DAO(数据访问对象)层、Service层以及相关的SQL语句,从而减少手动编写这些重复性代码的工作量,提高...

    hibernate项目源代码

    《深入剖析Hibernate项目源代码》 Hibernate,作为Java领域中的一款流行的对象关系映射(ORM)框架,极大地简化了数据库操作。它通过提供一个抽象层,使得开发人员可以使用面向对象的方式来处理数据库交互,而无需...

Global site tag (gtag.js) - Google Analytics