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。
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。