Hibernatej框架面试题.docx
- 文档编号:8212054
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:34
- 大小:2.57MB
Hibernatej框架面试题.docx
《Hibernatej框架面试题.docx》由会员分享,可在线阅读,更多相关《Hibernatej框架面试题.docx(34页珍藏版)》请在冰豆网上搜索。
Hibernatej框架面试题
一.什么是EJB?
JPA?
JPA并不是一项技术,而是一种标准,因为JPA只是一套接口,本身不能完成任何事情。
JPA只是规范了Java持久化的官方标准,希望整合ORM技术,实现天下归一。
1. 概述
首先,Sun引入新的JPAORM规范出于两个原因:
✍ 其一,简化现有JavaEE和JavaSE应用开发工作
✍ 其二,Sun希望整合ORM技术,实现天下归一
JPA全称为JavaPersistenceAPI ,Java持久化API是Sun公司在JavaEE5规范中提出的Java持久化接口。
主要是为了解决ORM框架的差异,它的出现在某种程度上能够解决目前ORM框架之间不能够兼容的问题,对开发人员来说,能够更好的在JPA规范下进行系统开发。
事实上,JPA并不是一项技术,而是一种标准,因为JPA只是一套接口,本身不能完成任何事情。
JPA只是规范了Java持久化的官方标准。
下图说明了JPA在系统架构中的作用,使用JPA持久化对象,而不是依赖于某一个ORM框架:
2. JPA主要技术
JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。
Hibernate3.2、TopLink10.1.3以及OpenJPA都提供了JPA的实现。
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。
总的来说,JPA包括以下3方面的技术:
2.1 ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
2.2 API
用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
2.3 查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
3. JPA优势
3.1 标准化
JPA 是 JCP 组织发布的 JavaEE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
容器级特性的支持:
JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
3.2 简单方便
JPA的主要目标之一就是提供更加简单的编程模型:
在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。
JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。
3.3 查询能力
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是HibernateHQL的等价物。
JPA定义了独特的JPQL(JavaPersistenceQueryLanguage),JPQL是EJBQL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUPBY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
3.4 高级特性
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。
4. EJB3与JPA的关系
由于历史的原因,EJB3与JPA有着藕断丝连的关系。
EJB2.X中,EJB有三种类型的Bean,分别是会话Bean(SessionBean)、实体Bean(EntityBean)和消息驱动Bean(MessageDrivenBean)。
随着EJB3规范的推出,EJB中的实体Bean(EnityBean)逐渐被JPA规范所替代,这也是为什么JPA的规范会包含在EJB3的规范中的原因.
但JPA不仅能够在EJB环境中使用,也能够在J2SE的环境中使用,相对于EJB2.X的实体BEAN,使用的范围更广。
总之,简单的说,JPA虽然出自EJB3,但是其使用的范围却大于EJB3,不仅可以在JavaEE5中,也可以在JavaSE的环境中,如图所示EJB3和JPA的关系:
EJB:
全名EnterpriseJavaBean。
你可以理解为它就是一个JavaBean,但是是一个很牛的JavaBean。
等等,你问我什么是JavaBean,晕。
JavaBean是可重用的组件,通常是为了解决某一特定问题而编写的业务类组件。
企业级JavaBean,一听就是一个很牛的名词。
它具体牛在什么地方呢,牛在它能够解决分布式开发事务处理等。
靠,你又问我什么是你可以理解为,多台服务器共同运行一个程序。
EJB就是为了这个而存在的。
在JavaEE5里,EJB的版本是3.0JPA:
JavaEE5的产物之一。
二.什么是元数据?
元数据就是用来定义数据的数据。
比如,有一条学生信息记录,其中包括字段姓名(name)、年龄(age)、性别(male)、班级(class)等,那么name、age、male、class就是元数据。
通过它们的描述,一条关于学生信息的数据记录就产生
三.Hibernate锁机制
一:
什么是锁?
需要一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,也就是所谓的“锁”,即给我们选定的目标数据(对象)上锁,使其无法被其他程序修改
二:
hibernate中的锁?
Hibernate支持两种锁机制
-“悲观锁(PessimisticLocking)”
-“乐观锁(OptimisticLocking)”。
三:
怎样使用锁?
悲观锁:
悲观锁就像他的名字一样,他认为每次他在操作数据库的时候,其他客户端程序也在执行这同样的操作。
因此,对操作的数据进行锁定,直到自己的操作完成后解除锁定。
所以,悲观锁的实现一般都是依赖数据库本身的锁机制。
乐观锁:
相对于悲观锁来说,乐观锁提供了更宽松的加锁机制。
他乐观的认为他在操作数据的时候,很少发生与之相同的情况。
他不在数据库层次上进行锁定。
为了维护正确的数据,乐观锁应用程序上的逻辑实现数据 版本号控制解决。
数据版本号:
是为了维护数据库增加一个版本标识,一般情况是通过给数据库表增加一个“version”字段来实现。
悲观锁的实现是基于数据库的锁机制完成的,可以使用Query或Criteria的setLockMode()方法来设定要锁定的数据和锁定的模式。
例如:
Query query=session.createQuery("from Useruwhereu.name='kitty'");
query.setLockMode('c',LockMode.UPGRADE);
Listlist=query.list();
代码送的别名为“u”的User对象进行锁定,在hibernate中加锁模式有:
-LockMode.NONE:
无锁机制
-LockMode.WRITE:
Hibernate在Insert和Update记录的时进行锁定
-LockMode.READ:
Hibernate在读取记录时进行锁定
-LockMode.UPGRADE:
利用数据库的forupdate子句加锁。
-LockMode.UPGRADE_NOWAIT:
Oracle的特定实现,利用Oracle的forupdatenowait子句实现加锁
注意:
只有在查询开始之前(也就是Hiberate生成SQL之前)设定加锁,才会真正通过数据库的锁机制进行加锁处理,否则,数据已经通过不包含forupdate子句的SelectSQL加载进来,所谓数据库加锁也就没有意义了。
乐观锁:
乐观锁依靠数据版本记录机制实现
-为数据增加一个版本标识,增加一个version字段
-读取数据时,将版本号一同读出
-更新时,版本号加一
-将提交数据的版本与数据库表对应记录的当前版本信息进行比对
-如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据
首先:
为持久类增加一个version属性及相应方法。
接着为class描述符添加optimistic-lock属性:
例如:
> …… optimistic-lock属性有如下可选取值: -none无乐观锁 -version通过版本机制实现乐观锁(官方推荐) -dirty通过检查发生变动过的属性实现乐观锁 -all通过检查所有属性实现乐观锁 然后: 添加一个Version属性描述符 column="version" name="version" type="java.lang.Integer" /> 四.Hibernate缓存机制 hibernate的查询缓存是主要是针对普通属性结果集的缓存,而对于实体对象的结果集只缓存id。 在一级缓存,二级缓存和查询缓存都打开的情况下作查询操作时这样的: 查询普通属性,会先到查询缓存中取,如果没有,则查询数据库;查询实体,会先到查询缓存中取id,如果有,则根据id到缓存(一级/二级)中取实体,如果缓存中取不到实体,再查询数据库,此时查就是一个N+1的效果。 和一级/二级缓存不同,查询缓存的生命周期,是不确定的,当前关联的表发生改变时,查询缓存的生命周期结束 五.Hibernate批处理 六.什么是ORM 简单理解Hibernate三种状态的概念及互相转化 什么是脏数据 脏数据并非废弃或者无用的数据,而是指一个数据对象所携带的信息发生了改变之后的状态,脏对象是属性被修改了的对象。 什么是脏检查 get和load的区别 List和Iterator的区别 Update和saveOrUpdate的区别 Query和Criteria接口 HibernateCriteria的Criterion,Projection,Restrictions等条件设置 注解: MVC和三层的区别 Model1和model2的区别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernatej 框架 试题
![提示](https://static.bdocx.com/images/bang_tan.gif)