hibernate 持久化对象的生命周期 2.1

持久化对象的生命周期

瞬态(自由态)
表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象
持久态
持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象的变化将会被同步到数据库中
session.save() .....到..session.getTransaction().commit();这个过程
托管态(游离态
提交之后的状态
处于持久态的对象,在其对应的Session实例关闭后,此时对象进入游离态。也就是说Session实例是持久态对象的
宿主环境,一旦宿主环境失效,那么持久态对象进入游离状态

游离态和自由态的区别:

1 游离态对象可以再次与Session进行关联而成为持久态对象。
2 自由态对象在数据库中没有数据与其对应,但是游离态对象在数据库中有数据与其对应,只不过当前对象不在
Session环境中而已。从对象的是否有主键值可以做简单的判断。

User user = new User();
    user.setUsername("tom");
    // 自由态的时候还是没有id的
    Session session = HibernateUtil.getSession();

    session.beginTransaction();
    session.save(user);    

    session.getTransaction().commit();
    syso(user.getId());

    //执行save之后关闭session,这个时候就已经有id了

----------------------------------------------------------------
----------------------------------------------------------------

load和get方法

1 get和load方法都是利用对象的主键值获取相应的对象,并可以使对象处于持久状态。
2 延迟加载...load方法获取对象时不会立即执行查询操作,而是在第一次使用对象是再去执行查询
操作。使用时有范围的,要在session的关闭之前,因为使用的时候才回去查,就要有session
如果查询的对象在数据库中不存在,load方法返回值不会为null,在第一次使用
时抛出org.hibernate.ObjectNotFoundException异常。
3 使用get方法获取对象时会立即执行查询操作,并且对象在数据库中不存在时返回null值。

Session session = HibernateUtil.getSession();

    session.beginTransaction();
        User user = (user)session.get(User.class,1);
        //这个时候执行了select方法
        syso(user == null);// 当user不存在时输出true
    session.getTransaction().commit();
Session session = HibernateUtil.getSession();

    session.beginTransaction();
        User user = (user)session.load(User.class,1);
        //这个时候不会执行select方法 当使用的时候
        //syso(user.getUsername())才会去查询
        syso(user == null);/* 当user不存在时false,永远都不会是null,因为有user的代理对象
        ,第一次使用的时候会出现异常*/
    session.getTransaction().commit();

-----------------------------------------------------------------------
-----------------------------------------------------------------------
 save和persist方法
1 save和persist方法都是将持久化对象保存到数据库中
2 save方法成功执行后,返回持久化对象的ID
3 persist方法成功执行后,不会返回持久化对象的ID,persist方法是JPA中推荐使用的方法
  hibernate是JPA的一种实现

------------------------------------------------------------
------------------------------------------------------------

save和update方法
save方法是将自由态的对象进行保存
update方法是将游离态的对象进行保存

-----------------------------------------------------------------
----------------------------------------------------------

update和saveOrUpdate方法
? 如果一个对象是游离态或持久态,对其执行update方法后会将对象的
修改同步到数据库中,如果该对象是自由态,则执行update方法是没有作用的
? 在执行saveOrUpdate方法时该方法会自动判断对象的状态,如果为
自由态则执行save操作,如果为游离态或持久态则执行update操作

----------------------------------------------------------------
--------------------------------------------------------------

update和merge方法
? 如果持久化对象在数据库中存在,使用merge操作时进行同步操作。
如果对象在数据库不存在,merge对象则进行保存操作
? 如果对象是游离状态,经过update操作后,对象转换为持久态。
但是经过merge操作后,对象状态依然是游离态

自由态交给merge就是insert
游离态交给merge就是update,但是之前会根据id去数据库查询一下

--------------------------------------------
-------------------------------------------

clear方法是将Session中对象全部清除,当前在Session中的对象
由持久态转换为游离态。flush方法则是将持久态对
象的更改同步到数据库中。

时间: 2024-10-12 15:43:26

hibernate 持久化对象的生命周期 2.1的相关文章

hibernate 持久化对象的生命周期

包括三种状态:瞬态(自由态),持久态,托管态(游离态) 自由态 持久化对象的自由态,指的是对象在内存中存在,但是在数据库中并没有数据与其关联. 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象的变化将会被同步到数据库中. 游离态 处于持久态的对象,在其对应的Session实例关闭后,此时对象进入游离态.也就是说Session实例是持久态对象的宿主环境,一旦宿主环境失效,那么持久态对象迚入游离状态. session.beginTransaction(); Us

hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)

三态的基本概念: 1,  暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象: 2,  持久化状态(Persistent):与session关联而且在数据库中有对应数据.已经持久化,添?到了Session缓存中.如通过hibernate语句保存的对象.处于此状态的对象叫持久对象: 3,  游离状态(Detached):持久化对象脱离了Session的对象.如Session缓

hibernate中持久化对象的生命周期(转载)

三态的基本概念 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: 2, 持久化状态(Persistent):与session关联并且在数据库中有相应数据.已经持久化,加入到了Session缓存中.如通过hibernate语句保存的对象.处于此状态的对象叫持久对象: 3, 游离状态(Detached):持久化对象脱离了Session的对象.如Session缓存被清空的

Hibernate持久化对象的三种状态

在Hibernate中,持久化对象在被操作的过程中可以分为三个时期,这三个时期是和Session的周期相关的,因为Hibernate中的操作都是基于Session完成的.Session的特定方法能使对象从一个状态转换到另一个状态. 持久化对象的生命周期有三种,瞬时状态.持久状态和分离状态.如下图: 瞬时态 不曾进行持久化,未与任何Session相关联.此状态的对象是用new关键字创建出来的,此时对象没有和数据库中记录对应. //Transient状态 Useruser = new User();

[原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Hibernate持久化对象状态

在Hibernate中,持久化对象再被操作过程中分为三个时期.这三个时期和session周期相关. 分别是瞬时(Transient),持久太(persistent)和游离态(Detached) 瞬时状态 由new命令开辟内存的java对象.例如:Student stu= newStudent();若没有变量对他引用,则被jvm回收.瞬时对象在内存中孤立存在,他的意义仅是携带信息的载体,不和数据库中的数据有任何的关联.通过session的save()和saveOrUpdate()方法可以把一个瞬时

hibernate--持久对象的生命周期介绍

持久化对象的状态 : 1. 瞬时对象(Transient Object):使用new操作符初始化的对象不是立刻就持久的.它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收 2. 持久化对象(Persistent Object):持久实例是任何具有数据库标识的实例,它有持久化管理器Session统一管理,持久实例是在事务中进行操作的----它们的状态在事务结束时同数据库进行同步.当事务提交时

六 领域驱动设计-领域对象的生命周期

目录 领域驱动设计-领域对象的生命周期 AGGREGATE FACTORY 领域驱动设计-领域对象的生命周期 每个对象都有生命周期,如图6-1所示.对象自创建后,可能会经历各种不同的状态,直至最终消亡--要么存档,要么删除.当然,很多对象是简单的临时对象,仅通过调用构造函数来创建,用来做一些计算,而后由垃圾收集器回收.这类对象没必要搞得那么复杂.但有些对象具有更长的生命周期,其中一部分时间不是在活动内存中度过的.它们与其他对象具有复杂的相互依赖性.它们会经历一些状态变化,在变化时要遵守一些固定规

Java对象的生命周期与作用域的讨论(转)

导读: Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3.其中T1表示对象的创建时间,T2表示对象的使用时间,而T3则表示其清除时间.由此,我们可以看出,只有T2是真正有效的时间,而T1.T3则是对象本身的开销.下面再看看T1.T3在对象的整个生命周期中所占的比例. 我们知道,Java对象是通过构造函数来创建的,在这一过程中,该构造函数链中的所有构造函数也都会被自动调用.另外,默认情况下,调用