熟悉Hibernate的体系结构
SessionFactory(org.hibernate.SessionFactory):该对象是JavaBean对象与数据库表之间的关系在内存中的镜像。一般一个数据库对应一个
SessionFactory。该对象是线程安全的,它是Session的工厂。使用它可以获得Session对象,并且它可以给事务之间可以重用的数据提供
二级缓存。
session(org.hibernate.Session):该对象表示应用程序和JavaBean对象交互操作的一个单线程对象。它是Transaction的工厂,使用它可以
获得Transaction,从而去进行事务操作。
Persistent Objects(持久化对象及其集合):该对象是与一个session对象相关联的JavaBean对象。当该session被关闭时,它们就会脱离持久
化状态,从而可以被应用程序的任何层使用。
Transient Objects(瞬态的对象及其集合):该集合代表实例化后但还没有和任何session相关联的JavaBean对象。
事务Transaction(org.hibernate.Transaction):该对象代表对数据库最小单位的操作。它通过抽象将应用程序和最底层具体的JDBC、JTA事务隔离
开。某种情况下,一个session可以包括多个Transaction对象。使用该对象一般进行事务的开启和关闭操作。
ConnectionProvider(org.hibernate.connection.ConnectionProvider):该对象是生成JDBC连接的工厂(同时也起到连接池的作用)。它通过抽象将
应用和底层的Datasource或DriverManager隔离开。
TransactionFactory(org.hibernate.TransactionFactory):该对象用来生成Transaction对象实例的工厂。
掌握Hibernate实体对象的生命周期
瞬态(Transient)
由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象和数据库的记录没有任何联系,因而
也不会被赋予持久化标识(identifier)。在应用程序中,如果没有保持对瞬时(Transient)对象的引用,它会被垃圾回收器(garbage collector)销毁。
持久态(Persistent)
一旦一个处于瞬时状态的对象和session相关联,它就转换为持久态(Persistent)。持久的实例在数据库中有对应的记录,并拥有一个持久化标识
(identifier)。持久(Persistent)的实例可能是刚被保存(save)到数据库的,或者是刚从数据库加载(load)的。在与该session断开连接之前,Hibernate
会监测到处于持久(Persistent)状态的对象的任何改动,并且在当前操作单元(unit of work)执行完毕时将对象中的数据与数据库的相关记录同步。
游离态(Detached)
一旦与持久(Persistent)对象关联的session被关闭后,对象就变为脱管(Detached)的。在脱管期间,该对象可继续被修改。如果脱管对象被重新关联
到某个session上,会再次转变为持久的,这时在托管期间的任何改动都会被保存到数据库中。
实体对象的状态转换
使对象持久化
装载对象
装在对象一般使用如下所示的两个函数。
load(): 如果知道一个对象的标识(identifier),则就可以使用session的load()方法来获取它。load()的另一个参数是指定类的class对象。该方法会创建
指定类的持久化实例,并从数据库加载其数据。
get():使用load()方法装载某个对象,如果在数据库中该记录不存在,则会抛出一个异常。如果程序员不确定要装载的记录是否存在,可以使用get()
方法。
修改脱管对象
Session.update();
Session.merge();
使用saveOrUpdate()方法
学会使用Hibernate API
使用Configuration 类
使用SessionFactory接口
使用Session接口
使用Transaction接口
使用Criteria接口