首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate相干

2012-10-29 
Hibernate相关1 JPA是什么?JPA与Hibernate关系? JPA与EJB关系??????? http://lengdian.iteye.com/blog/611

Hibernate相关

1 JPA是什么?JPA与Hibernate关系? JPA与EJB关系?
?????? http://lengdian.iteye.com/blog/611128
?????? JPA定义Java Persistence API
?????? JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
?????? HIBERNATE实现了JPA标准
?????? JPA就是应用程序内置的一套事务管理机制,EJB,Hibernate都是建立在它基础之上的
?????? JPA是一种接口,JBoss服务器用Hibernate实现了该接口.j2ee在JBoss服务器下部署,在程序中调用JPA.实现上是调用的是
?????? Hibernate3.0 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用的对象持久化的开发工作;
?????? 其二,Sun希望整合对ORM技术,实现天下归一。
?????? JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
?????? JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供应商特有的API
?????? 。因此开发人员只需使用供应商特有的API来获得JPA规范没有解决但应用程序中需要的功能。尽可能地使用JPA API,但是当需要
?????? 供应商公开但是规范中没有提供的功能时,则使用供应商特有的API。
?????? JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,目前来说应该无人能出其右。从功能上来说,
?????? JPA现在就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。

?

2? 可以将hibernate分成几块?
?? (1) pojo类模型(与数据库scheme,表映射关系 DDL SQL对应):
???? pojo类???????? -- 表
???? pojo类组合关系 -- 表关联关系(一对一、一对多、多对一,多对多) 参考《企业应用架构模式》 第12章 对象-关系结构模式12.2 12.3 12.4
???? pojo类继承多态关系 -- 表 参考《企业应用架构模式》 第12章 对象-关系结构模式12.7 12.8 12.9

?? (2) hibernate增删改查相关(与数据库DML SQL对应):
???? 查询种类:??
??? ?? JDBC:标准的SQL语句
??? ?? HQL :Hibernate Query Language
??? ?? QBC :(Query By Criteria) criteria
??? ?? QBE :(query by example)
??? ?? 导航对象图查询
??? ?? 根据id查询
????? 增删改:
?? (3) hibernate Configration,SessionFactory, Session,transaction (与数据库建立连接或连接池,事务对应):
?? (4) 缓存策略:ehcache,Memcache...
?? (5) 其它配置:
??? xml, annotation

?

?3? javax.persistence.Entity类来自于
??? ?Annotation:
??? ? (1) java.lang.annotation:???? J2SE标准? jdkdoc
??? ? (2) ejb3-persistence.jar:???? J2EE标准? http://java.sun.com/javaee/technologies/persistence.jsp
??? ? (3) hibernate-annotation.jar: hibernate实现
??? ? 实体类与数据库表之间映射通过annotation实现的,当然也可以用XML配置,全球眼中心是通过hibernateXML配置完成的
??? ? 目标一致,实现方式不同

?

4? 懂hibernate是不是就不需要懂,数据库 和 jdbc了呢?
?? 需要懂,因为hibernate只是轻量级封装了jdbc而已,实际的事务,还是用jdbc的,
?? hibernate做的最主要的工作,是把pojo对象转换为数据库语句
?? 只有懂数据库才能把hibernate用好,用精。

?

hibernate中的session相当于jdbc中的connection实际上hibernate 中的session封装了connection,数据库连接也是通过
???? jdbc的拿到的connection连接

?

spring + hibernate 配置中,如何管理session and transation?
???????? 自己写的hibernate例子中 所有的读写操作都是通过session做的
???????? 网管后台业务中,所有的操作是通过hibernateTemplate操作的
???????? hibernateTemplate find操作是通过HibernateCallback实现的
???????? 采用声明式的事务

?

?5 表与类之间继承关系分为?表与类之间组合关系?
?? 表与类之间继承关系:
???? Class Table Inheritance(类表继承):表示了类的继承层次,每个类都对应一个表。
???? Concrete Table Inheritance(具体表继承):表示了类的继承层次,层次中的每一个
??????? 具体层的类对应一个表
???? Single Table Inheritance(单表继承):通过一个表来表示类的一个继承层次,表中各
??????? 列对应不同类中的所有域。
???? Unit of Work(工作单元):维护由业务锁影响的对象列表,并协调更改的写出以及并发问题的解决。

? 6? 表与类之间组合关系: 一对一,一对多,多对一,多对多

???? session-per-operation??? 不建议使用
???? session-per-request????? 建议使用
???? session-per-request-with-detached-object
???? session-per-conversation
???? session-per-user-session 不建议使用
???? session-per-application? 不建议使用

?

6 基于annotation的hibernate主键生成策略:

? http://hi.baidu.com/jjzhong/blog/item/728fc0dd907790e677c6384e.html
?????? Hibernate 主键策略:IdentifierGeneratorFactory
??? ??? GENERATORS.put("uuid", UUIDHexGenerator.class);
??? ??? GENERATORS.put("hilo", TableHiLoGenerator.class);
??? ??? GENERATORS.put("assigned", Assigned.class);
??? ??? GENERATORS.put("identity", IdentityGenerator.class);
??? ??? GENERATORS.put("select", SelectGenerator.class);
??? ??? GENERATORS.put("sequence", SequenceGenerator.class);
??? ??? GENERATORS.put("seqhilo", SequenceHiLoGenerator.class);
??? ??? GENERATORS.put("increment", IncrementGenerator.class);
??? ??? GENERATORS.put("foreign", ForeignGenerator.class);
??? ??? GENERATORS.put("guid", GUIDGenerator.class);
??? ??? GENERATORS.put("uuid.hex", UUIDHexGenerator.class); //uuid.hex is deprecated
??? ??? GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class);
??????? hibernate一共默认支持十三种生成策略。
??????? 1、native 2、uuid 3、hilo 4、assigned 5、identity 6、select 7、sequence 8、seqhilo 9、increment
??????? 10、foreign 注意:直接使用@PrimaryKeyJoinColumn 报错(?) 例如 应该为 11、guid 12、uuid.hex
??????? 13、sequence-identity??????
?????? 通过@GenericGenerator自定义主键生成策略如果实际应用中,主键策略为程序指定了就用程序指定的主键(assigned),没有指
?????? 定就从sequence中取。明显上面所讨论的策略都不满足,只好自己扩展了,集成assigned和sequence两种策略。 实际应用中,
?????? 定义同sequence。

?

热点排行