关于Hibernate的一些基础问题
Hibernate 通过ORM (即对象关系映射)技术来实现数据的持久化操作的,也就是把关系数据库映射为java 中的类和对象。
闲话不多说,下面介绍一下使用Hibernate 进行数据持久化的步骤
如果大家需要一个简单的Hibernate例子的话,可以参照我的一篇文章<<一个简单的Hibernate例子的心得 >>
1. 创建Configuration 对象。对配置文件进行读取和解析。
Configuration cfg=new Configuration().Configure()
2. 创建SessionFactory 对象。这个对象是产生Session 对象的工厂。注意,这一步和上一步在应用程序中只进行一次。
SessionFactory sessionFactory=cfg.buildSessionFactory()
3. 创建Session 对象。这个对象相当于和数据库的一个连接。
Session session=sessionFactory.openSession()
4. 开始一个事务。
Transaction t=session.beginTransaction()
5. 进行持久化操作。
Session.save(Object o)…
6. 提交(结束)事务。
t.commit()
7. 关闭Session 对象。
Session.close()
在进行持久化的过程中,一个持久化类有三个状态:瞬态(Transient ), 持久态(Persistent ), 游离态(Detached )
下面用一个Child 类解释一下:
Public class Child{
String id;// 主键
String name;// 名字
Getter and Setter…
}
1. 瞬态(Transient )是一个类刚刚建立还没有进行持久化操作的时候的状态,这时候的类没有标示(就是数据库表中的主键)
例如:Child c=new Child();
c.setName(“David”);
这个类还没有持久化,是瞬态。
2. 持久态(Persistent )此时这个类处于Hibernate 框架的管理中,这时候你对该对象作的任何改动都会持久化到数据库中。
例如:从上面继续
Configuration cfg=new Configuration().Configure();
SessionFactory sessionFactory=cfg.buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction t=session.beginTransaction();
// 现在的c 还是瞬态呢
session.save(c);
// 进行持久化操作后,c 就成了持久态,这是对c 进行任何改动都回持久化到数据库中去
t.commit();
session.close();
3. 游离态(Detached )是由持久态(Persistent )转化而来的。当一个持久态(Persistent )的对象不再和session 相关联的时候,它就变成了游离态。比如上个例子中我们关闭色Session 对象后,c 就成了游离态。这时候对c 的任何改动都不对对数据库中的数据造成影响。
这三种状态的转换图如下: