Hibernate_Gossip学习笔记
* 米小國 * 奇想世界☆.╯http://www.caterpillar.onlyfun.net/phpBB2/ 里面下载的“Hibernate Gossip - 簡介Hibernate”
这个里面提供了Hibernate的基础知识,步骤又是循序渐进,再把例子做完,估计对Hibernate应该有个比较初步的认识,并可以在项目中运用了。
1 是本好书,入门看懂,例子做完,这是基本。而且,在使用Hibernate的过程中,还可以回过头再看看入门,内容组织得比较有层次感,只是因为是台湾同胞写的,读起来不容易适应,因此对Hibernate有些熟悉后重读,就可以屏蔽掉语言上的差异性,更多理解文章内涵。
× Hibernate是ORM(Object/Relational Mapping)的解决方案。
× Hibernate所需要的类别库
× 提供JDBC连接
2 继承映射:父类与子类
× 每个对象一张表,各自单独映射。这样映射方便,但是有重复数据,不能多态操作。
× 所有对象一张表,有个字段专门用于区别对象;
× 每个对象一张表,共享主键,除主键外没有重复数据,子类属性通过父类扩展查询。
3 集合映射:主要是提供这几种方式下Hibernate如何处理,都是对象中嵌入对象。
× Component映射、Set映射、List映射、Map映射
× Set与Map排序:可以使用Java排序,也可以使用DB排序。
× Component中集合映射:就是对象中有集合,集合中再存储对象。
× Hibernate对象的三种状态:暂存(Transient)、持久(Persistent)、分离(Detached)
在Java中使用new创造的对象,就是暂存的, 暂存对象执行save()或saveOrUpdate()就是持久的;
持久对象总是与session和transaction相关联,持久对象执行delete()就会回到暂存的;
当session执行close(), clear(), evict()之后,对象就会变成分离的。
分离对象拥有id,执行update(), saveOrUpdate(), lock()之后,对象就会重新变成持久的。
× 对象的比较。==, equals(), hashCode()
4 实体映射:(章节设计是否有问题。因为映射就是四种:一对一、一对多、多对一、多对多。其他重要功能:持久化、瀑布持久化、双向关联与inverse设定。)
× 多对一映射 × 一对多映射 × 一对一映射 × 多对多映射
× Cascade Persistent/瀑布持久化:父类持久化后,子类应自动持久化。
Persistence of Reachability/可达性持久化
× 双向关联与inverse设定,这个是接着Cascade Persistence来说明的。与多对一映射和一对多映射的区别是可以自动更新子类。
× 延迟初始(Lazy Initialization)。真正需要时才向数据库索取数据。但是在处理加载的代码中间不能关闭Session,否则发生LazyInitializationException。
5 Session 与 Criteria
× Session管理:
Session是Hibernate的核心,负责对象的生命周期、事务管理、数据库存取。
Session由SessionFactory创建,SessionFactory是线程案例的,但是Session不是,因此不能共用。
为了提高使用效率,提供了一个共用Session的例子,采用ThreadLocal实现供参考。
× Criteria查询:
可以不使用SQL或者HQL,而采用完全基于Java的语法风格来进行数据查询;
但是,Criteria现在只能提供许多基本的功能。
6 事务管理
× 事务管理:
JDBC事务。用Connection管理事务,Hibernate对JDBC事务做了简单封装。
JTA事务。使用JTA容器来管理事务,与Session无关。
× 悲观锁定(Pessimistic Locking):依赖系统或者数据库本身的机制完成。
× 乐观锁定(Optimistic Locking):由Hibernate完成,并且为Hibernate推荐方式,增加了VERSION列。
7 相关工具
× SchemaExportTask:从映射文件建立数据库表
× Hbm2JavaTask:从映射文件建立Java Bean类。