使用Hibernate进行持久化操作:

1.开发持久化类,由POJO+映射文件(*.hbm.xml)组成
2.获取Configuration(用于获取hibernate.cfg.xml或hibernate.properties配置文件)
3.获取SessionFactory(SessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SessionFactory对象)
4.获取Session,打开事务
5.用面向对象的方式操作数据库
6.关闭事务,关闭Session
Configuration对象 -->SessionFactory对象 --> Session
简要的Hibernate体系架构 和 Hibernate全面解决方案体系架构
  
底层数据库连接的获得、数据库访问的实现、事务控制(JNDI、JDBC、JTA)都无须用户关心
JPA:Java Persistence API,JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中
JTA:Java Transaction API(Java事务API)
JNDI:java Naming Directory Interface,Java命名目录接口
 
SessionFactory:这是Hibernate的关键对象,它是单个数据库映射关系经过编译后的内存镜像,它是线程安全的。它是生成Session的工厂,本身需要依赖于ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。
Session:它是应用程序与持久储存层之间交互操作的一个单线程对象。他也是Hibernate持久化操作的关键对象,所有的持久化对象必须在Session管理下才可以进行持久化操作。此对象生存期很短。它底层封装了JDBC连接,它也是Transaction的工厂。Session对象持有一个必选的一级缓存,显示执行flush之前,所有持久化操作的数据都在缓存汇总Session对象处。
持久化对象:系统创建的POJO实例,一旦与特定的Session关联,并对应数据表的指定记录,该对象就处于持久化转台,这一系列对象被称为持久化对象。在程序中对持久化对象执行的修改,都将自动被转换为持久层的修改。持久化对象完全可以是普通的JavaBeans/POJO,唯一特殊的是它们正与一个Session关联。
瞬态对象和托管对象:系统通过new关键字创建的java实例,没有与Session相关联,此时处于瞬态。瞬态实例可能是在被应用程序实例化后,尚未进行持久化的对象。如果一个曾经持久化过的实例,但因为Session的关闭则转化为托管状态。
事务:Transaction,代表一次原子操作,它具有数据库事务的概念。Hibernate事务是对底层具体的JDBC、JTA以及CORBA事务的抽象。在某些情况下,一个Session之内可能包含多个Transaction对象。虽然事务操作是可选的,但所有持久化操作都应该在事务管理下进行,即使是只读操作。
连接提供者(ConnectionProvider):它是生成JDBC连接的工厂,它通过抽象将应用程序与底层的DataSource或DriverManager隔离开。这个对象无需应用程序直接访问,仅在应用程序需要扩展时使用。
事务工厂(TransactionFactory):它是生成Transaction对象实例的工厂。该对象也无须应用程序直接访问。它负责对底层具体的事务实现进行封装、将底层具体的事务抽象成Hibernate事务。
 
PO的三种状态:
 
瞬态:PO实例从未与Session关联过
持久化:PO实例与Session关联起来,且该实例对应到数据库记录
托管:如果PO实例曾经与Session关联过,但因为Session的关闭等原因,PO实例脱离了Session的管理