您的位置:首页 > 其它

Hibernate对象状态转化

2016-04-30 17:22 387 查看
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,完成数据持久化的重任。包括五个核心接口,Hibernat通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

Session接口负责执行被持久化对象的CRUD操作,在hibernate 中使用最为广泛,是持久化操作的核心。session的生命周期存在于transaction中,Hibernate中数据库连接最终包装成Session对象, 使用Session对象可以对数据库进行操作。

Session的创建

Configuration config = new Configuration().configure();
SessionFactory sessions = config.buildSessionFactory();


对象在生命周期中有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象。

瞬时态(Transient)

由new操作符创建,尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象没有被存入任何数据表中,也不会被持久化到数据库中,一旦不被其他对象引用,他们的状态立即消失。

瞬时态对象创建

User user - new User();
user.SetName("Tom");
user.SetSex("Man");


瞬时状态的特点有:

1、 与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录。

2、 与Session没有任何关系,也就是没有通过Session对象的实例对其进行任何持久化的操作。

持久态(Persistent)

持久化状态(Persistent):与session关联并且在数据库中有相应数据。已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象。

瞬时态转化持久态

 User user - new User();
user.SetName("Tom");
user.SetSex("Man");
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransation();
session.save(user); //user处于持久化状态
transaction.commit();
session.close();


持久对象特点:

1. 和session实例关联;

2. 在数据库中有与之关联的记录。

Hibernate三种状态之三:游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象,即当持久态欧对象不再与session关联时,则变为游离状态。

 User user - new User();
user.SetName("Tom");
user.SetSex("Man");
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransation();
session.save(user);
transaction.commit();
session.close(); //关闭session后,user处于游离状态


游离态对象特点:

游离态对象不再与session实例关联。

游离态对象属性值的改变不会同步到数据库。

三态之间的转换方法:

对象通过构造方法成为自由态;持久态和游离态则通过session的delete方法成为自由态.

对象可以由session的load或get方法直接成为持久态;自由态对象可以通过save,saveOrUpdate或persist方法成为持久态;游离态对象则可以通过update,saveOrUpdate成为持久态.

游离态只能由持久态转换而来,通过close或clear方法实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: