先贴一张Hibernate官方用户手册的类关系图,上面标注了具体类名。由下图可以清楚看到,Hibernate实现了JPA规范。
(以下摘抄自文档中的部分翻译,英语水平有限,如有误,欢迎指正)
1、SessionFactory
一个线程安全,代表了实体类(domain)到数据库的映射,用于产生Session实例对象。创建一个SessionFactory的代价是非常昂贵的,所以对于任意给定的数据库,应用程序应只拥有一个与其相关联的SessionFactory。SessionFactory维护Hibernate在所有Session中使用的服务,比如二级缓存、连接池、事务系统集成等等。(负责初始化hibernate,创建session对象)
2、Session
一个单线程,存活时间短的对象,在JPA中Session由EntityManager表示。Session包装了JDBC的java.sql.Connection连接。也充当了创建Transaction实例的工厂。
它维护了实体类(domain)对象模型中一个基本的"可重复阅读"的持久化上下文(一级缓存)。(也就是负责持久化对象的CRUD操作)
3、Transaction
是应用程序使用的单线程、存活时间短的用来划分单独的物理事务边界的对象。在JPA中表示为EntityTransaction。
可参照该博主的文:http://blog.csdn.net/jiuqiyuliang/article/details/39078749
下面贴出测试类的代码进行详解
NATIVE:
关于ServiceRegistry的理解,可参考:http://www.oschina.net/question/12_84538
JPA: