`
iloveoracle
  • 浏览: 115615 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hibernate相关

    博客分类:
  • java
阅读更多
    1 jpa是什么?jpa与hibernate关系? jpa与ejb关系?<br>       http://lengdian.iteye.com/blog/611128<br>       jpa定义java persistence api<br>       jpa通过jdk 5.0注解或xml描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。<br>       hibernate实现了jpa标准<br>       jpa就是应用程序内置的一套事务管理机制,ejb,hibernate都是建立在它基础之上的<br>       jpa是一种接口,jboss服务器用hibernate实现了该接口.j2ee在jboss服务器下部署,在程序中调用jpa.实现上是调用的是<br>       hibernate3.0 sun引入新的jpa orm规范出于两个原因:其一,简化现有java ee和java se应用的对象持久化的开发工作;<br>       其二,sun希望整合对orm技术,实现天下归一。<br>       jpa通过jdk 5.0注解或xml描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。<br>       jpa 的目标之一是制定一个可以由很多供应商实现的api,并且开发人员可以编码来实现该api,而不是使用私有供应商特有的api<br>       。因此开发人员只需使用供应商特有的api来获得jpa规范没有解决但应用程序中需要的功能。尽可能地使用jpa api,但是当需要<br>       供应商公开但是规范中没有提供的功能时,则使用供应商特有的api。<br>       jpa是需要provider来实现其功能的,hibernate就是jpa provider中很强的一个,目前来说应该无人能出其右。从功能上来说,<br>       jpa现在就是hibernate功能的一个子集。hibernate 从3.2开始,就开始兼容jpa。
 
2  可以将hibernate分成几块?<br>   (1) pojo类模型(与数据库scheme,表映射关系 ddl sql对应):<br>     pojo类         -- 表<br>     pojo类组合关系 -- 表关联关系(一对一、一对多、多对一,多对多) 参考《企业应用架构模式》 第12章 对象-关系结构模式12.2 12.3 12.4<br>     pojo类继承多态关系 -- 表 参考《企业应用架构模式》 第12章 对象-关系结构模式12.7 12.8 12.9<br><br>   (2) hibernate增删改查相关(与数据库dml sql对应):<br>     查询种类:   <br>       jdbc:标准的sql语句<br>       hql :hibernate query language<br>       qbc :(query by criteria) criteria<br>       qbe :(query by example)<br>       导航对象图查询<br>       根据id查询<br>      增删改:<br>   (3) hibernate configration,sessionfactory, session,transaction (与数据库建立连接或连接池,事务对应):<br>   (4) 缓存策略:ehcache,memcache...<br>   (5) 其它配置:<br>    xml, annotation
 
 3  javax.persistence.entity类来自于<br>     annotation:<br>      (1) java.lang.annotation:     j2se标准  jdkdoc<br>      (2) ejb3-persistence.jar:     j2ee标准  http://java.sun.com/javaee/technologies/persistence.jsp<br>      (3) hibernate-annotation.jar: hibernate实现<br>      实体类与数据库表之间映射通过annotation实现的,当然也可以用xml配置,全球眼中心是通过hibernatexml配置完成的<br>      目标一致,实现方式不同
 
4  懂hibernate是不是就不需要懂,数据库 和 jdbc了呢?<br>   需要懂,因为hibernate只是轻量级封装了jdbc而已,实际的事务,还是用jdbc的,<br>   hibernate做的最主要的工作,是把pojo对象转换为数据库语句<br>   只有懂数据库才能把hibernate用好,用精。
 
hibernate中的session相当于jdbc中的connection实际上hibernate 中的session封装了connection,数据库连接也是通过<br>     jdbc的拿到的connection连接
 
spring + hibernate 配置中,如何管理session and transation?<br>         自己写的hibernate例子中 所有的读写操作都是通过session做的<br>         网管后台业务中,所有的操作是通过hibernatetemplate操作的<br>         hibernatetemplate find操作是通过hibernatecallback实现的<br>         采用声明式的事务
 
 5 表与类之间继承关系分为?表与类之间组合关系?<br>   表与类之间继承关系:<br>     class table inheritance(类表继承):表示了类的继承层次,每个类都对应一个表。<br>     concrete table inheritance(具体表继承):表示了类的继承层次,层次中的每一个<br>        具体层的类对应一个表<br>     single table inheritance(单表继承):通过一个表来表示类的一个继承层次,表中各<br>        列对应不同类中的所有域。<br>     unit of work(工作单元):维护由业务锁影响的对象列表,并协调更改的写出以及并发问题的解决。<br><br>  6  表与类之间组合关系: 一对一,一对多,多对一,多对多<br><br>     session-per-operation    不建议使用<br>     session-per-request      建议使用<br>     session-per-request-with-detached-object<br>     session-per-conversation <br>     session-per-user-session 不建议使用<br>     session-per-application  不建议使用
 
6 基于annotation的hibernate主键生成策略:
  http://hi.baidu.com/jjzhong/blog/item/728fc0dd907790e677c6384e.html<br>       hibernate 主键策略:identifiergeneratorfactory<br>        generators.put("uuid", uuidhexgenerator.class);<br>        generators.put("hilo", tablehilogenerator.class);<br>        generators.put("assigned", assigned.class);<br>        generators.put("identity", identitygenerator.class);<br>        generators.put("select", selectgenerator.class);<br>        generators.put("sequence", sequencegenerator.class);<br>        generators.put("seqhilo", sequencehilogenerator.class);<br>        generators.put("increment", incrementgenerator.class);<br>        generators.put("foreign", foreigngenerator.class);<br>        generators.put("guid", guidgenerator.class);<br>        generators.put("uuid.hex", uuidhexgenerator.class); //uuid.hex is deprecated<br>        generators.put("sequence-identity", sequenceidentitygenerator.class);<br>        hibernate一共默认支持十三种生成策略。 <br>        1、native 2、uuid 3、hilo 4、assigned 5、identity 6、select 7、sequence 8、seqhilo 9、increment <br>        10、foreign 注意:直接使用@primarykeyjoincolumn 报错(?) 例如 应该为 11、guid 12、uuid.hex <br>        13、sequence-identity       <br>       通过@genericgenerator自定义主键生成策略如果实际应用中,主键策略为程序指定了就用程序指定的主键(assigned),没有指<br>       定就从sequence中取。明显上面所讨论的策略都不满足,只好自己扩展了,集成assigned和sequence两种策略。 实际应用中,<br>       定义同sequence。
 
 
0
8
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics