Hibernate面试题+答案
篇幅很长,请耐心阅读和学习,希望对你有所帮助!
1.下面不属于持久化的是( a)
A.把对象转换为字符串的形式通过网络传输,在另一端接收到这个字符串后能把
对象还原出来
B.把程序数据从数据库中读出来
C.从XML配置文件中读取程序的配置信息
D.把程序数据保存为文件
3.下面(a )不属于 关系—对象 映射的映射信息。
A.程序包名到数据库库名的映射
B.程序类名到数据库表名的映射
C.实体属性名到数据库表字段的映射
D.实体属性类型到数据库表字段类型的映射
4. 使用Hibernate技术实现数据库持久化时,(d)内容不在Hibernate配置文件中。
A. 数据库连接信息
B. 数据库类型
C. show_sql参数
D. 数据库表和实体的映射信息
5. 数据库表account对应实体类为Account类,以下HQL语句错误的有( d)。
A. select * from Account
B. From Account
C. From Account as model
D. Select * from account
6. 级联删除时,cascade属性是( c )。
A. all
B. save
C. delete
D. save-update
7. 以下不属于Cascade的属性取值的有( b )。
A. all
B. save
C. delete
D. save-update
8. 关于HQL查询,下列说法中错误的是( A )。
A. HQL查询的select子句中必须区分大小写
B. HQL支持统计函数
C. HQL支持仅查询对象的某几个属性,并将查询结果保存在Object数组中
D. HQL语句可以实现类似于PreparedStatement的效果
9. 由持久化状态向游离状态转变的方法不包括( C)。
A. 临时状态
B. 无引用状态
C. 持久化状态
D. 游离状态
10. 关于HQL与SQL,以下哪些说法正确?(B)。
A. HQL与SQL没什么差别
B. HQL面向对象,而SQL操纵关系数据库
C. 在HQL与SQL中,都包含select,insert,update,delete语句
D. HQL仅用于查询和删除数据,不支持insert,update语句
11. 下面关于Hibernate说法正确的是(BD)。(选择两项)
A. Hibernate是ORM的一种实现方式
B. Hibernate不要JDBC的支持
C. 属于控制层
D. 属于数据持久层
12. 下面关于Hibernate中load和get方法说法正确的是(D)。
A. 这两个方法是一样的,没有任何的区别
B. 这两个方法不一样,laod先找缓存,再找数据库
C. 这两个方法不一样,get先找缓存,再找数据库
D. 以上说法都不对
13. 关于Hibernate中关系的说话正确的是(A)。
A. 一对多必须用Set来映射
B. 多对一必须用Set来映射
C. 一对多可以用Set来映射,也可以用List、Map来映射
D. 多对一可以用Set来映射,也可以用List、Map来映射
14. 以下关于SessionFactory的说法哪些正确?( C)。
A. 对于每个数据库事务,应该创建一个SessionFactory对象
B. 一个SessionFactory对象对应多个数据库存储源
C. SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个
D. SessionFactory的load()方法用于加载持久化对象
15. 在使用了Hibernate的系统中,要想在删除某个客户数据的同时删除该客户对应的所有订单数据,下面方法可行的是(A)。
A. 配置客户和订单关联的cascade属性为save-update
B. 配置客户和订单关联的cascade属性为all
C. 设置多对一关联的inverse属性为true
D. 设置多对一关联的inverse属性为false
16
在三层结构中,数据访问层承担的责任是()
a)定义实体类
b)数据的增删改查操作
c)业务逻辑的描述
d)页面展示和控制转发
17
下面关于数据持久化概念的描述,错误的是()〔选择一项〕
a)保存在内存中数据的状态是瞬时状态
b)持久状态的数据在关机后数据依然存在
c)数据可以由持久状态转换为瞬时状态
d)将数据转换为持久状态的机制称为数据持久化
18.下面( ab)不是Hibernate 映射文件中包含的内容。(选两项)
A.数据库连接信息
B.Hibernate 属性参数
C.主键生成策略
D.属性数据类型
19. Hibernate对象从临时状态到持久状态转换的方式有?( A)。
A. 调用session的save方法
B. 调用session的close方法
C. 调用session的clear方法
D. 调用session的evict方法
20 | 下面关于Hibernate的说法,错误的是()〔选择一项〕 | |
a) | Hibernate是一个”对象-关系映射”的实现 | |
b) | Hibernate是一种数据持久化技术 | |
c) | Hibernate是JDBC的替代技术 | |
d) | 使用Hibernate可以简化持久化层的编码 |
21 | Hibernate配置文件中,不包含下面的()〔选择二项〕 | |
a) | “对象-关系映射”信息 | |
b) | 实体间关联的配置 | |
c) | show_sql等参数的配置 | |
d) | 数据库连接信息 | |
21 | 下面不是Hibernate映射文件中包含的内容。(选两项) | |
a) | 数据库连接信息 | |
b) | Hibernate属性参数 | |
c) | 主键生成策略· | |
d) | 属性数据类型 |
22 | 在使用了Hibernate的系统中,要想在删除某个客户数据的同时删除该客户对应的所有订单数据,下面方法可行的是()。〔选择一项〕 | |
a) | 配置客户和订单关联的cascade属性为save-update | |
b) | 配置客户和订单关联的cascade属性为all | |
c) | 设置多对一关联的inverse属性为true | |
d) | 设置多对一关联的inverse属性为false |
23 | 以下程序的打印结果是什么? tx = session.beginTransaction(); | |
a) | 运行出错,抛出异常 | |
b) | 打印false | |
c) | 打印true | |
d) | 编译出错 |
24 | 对于以下程序,Customer对象在第几行变为持久化状态?(单选) | |
a) | line1 | |
b) | line2 | |
c) | line3 | |
d) | line4 |
25 | ORM有什么好处 | |
a) | 能进行关系对象的映射 | |
b) | 具有控制器功能 | |
c) | 能在服务器端保存客户端状态 | |
d) | 向DTO一项能传递数据 |
26 | 过程域对象在Hibernate中代表 | |
a) | 业务逻辑操作 | |
b) | 应用层操作 | |
c) | 数据库层操作 | |
d) | 组件对象操作 |
27 | 使用Session的____会把对象的状态从数据库中移除 | |
a) | delete() | |
b) | remove() | |
c) | clear() | |
d) | removeAll() |
5.下列属于多对一关系的是(bd )。(选两项)
A.书和作者
B.手机和生产厂家
C.用户和发布的出租信息
D.士兵
在set节点中设置”outer-join=”true””,当调用Session的find方法时采用( C)。
A. 立即检索
B. 延迟检索
C. 迫切左外连接检索
D. 批量检索
以下哪一种检索策略利用了外连结查询?(单选) | ||
a) | 立即检索 | |
b) | 延迟检索 | |
c) | 迫切左外连结检索 | |
d) | 迫切右外连结检索 |
43. 下面关于Hibernate中Transaction的使用说法正确的是(B)。
A. Transaction是可有可无的
B.
Transaction在做查询的时候是可选的
C. Transaction在做删除的时候是可选的
D. Transaction在做修改的时候是可选的
23) | POJO是 | |
a) | Plain Old Java Object | |
b) | Programming Object Java Object | |
c) | Page Old Java Object | |
d) | Plain Object Java Old |
24) | POJO的作用是 | |
a) | 普通的Java对象映射数据库字段 | |
b) | 数据访问 | |
c) | 对象的赋值 | |
d) | 保存客户端对象 |
25) | 实现equals和hashCode最显而易见的作用是 | |
a) | 比较两个对象标识符的值 | |
b) | 比较数据库的两条数据 | |
c) | 比较两个组建是否部署在同一个应用服务器上 | |
d) | 对象与字段的映射 |
33) | JDBC可以做哪三件事 | |
a) | 与数据库建立连接 | |
b) | 通过JDBC-API向数据库发送SQL语句 | |
c) | 通过JDBC-API执行SQL语句 | |
d) | 进行实体关系的映射 |
38) | 对象(实体的实例)对一个特定的Session来说,要么是一个____对象,要么是____对象 | |
a) | 瞬时 | |
b) | 持久化 | |
c) | 控制器 | |
d) | 数据传输对象 |
39) | 如果你已知某个实例的持久化标识,你可以使用Session的______方法来获取它 | |
a) | load() | |
b) | loadAll() | |
c) | getAllData() | |
d) | init() |
44) | ____和____子句都不支持算数表达式。 | |
a) | group by | |
b) | order by | |
c) | compute by | |
d) | insert by |
45) | 除了____和____外,查询语句都是大小写不敏感得到。 | |
a) | Java类 | |
b) | POJO类 | |
c) | 映射文件 | |
d) | 属性名称 |
46) | from Cat as cat,不仅仅返回____的实例,而且还返回____的实例 | |
a) | Cat | |
b) | Cat父类 | |
c) | Cat子类 | |
d) | Cat实现接口 |
54) | 在Hibernate中,关于数据库的方言,下面哪个说法是正确的 | |
a) | 可以不写数据库方言 | |
b) | 数据库方言没有作用,可以随便写 | |
c) | 有通用的数据库方言可以使用 | |
d) | 数据方言对应于每个数据库,主要用于产生SQL语句 |
57) | 下面的程序执行后没有报错,但数据总保存不到数据库,最可能的原因是 public static void imain(String[] args){ SessionFactory sf=new Configration().configure().buildSessionFactory(); Session session=sf.openSession(); Medal medal=new Medal(); medal.setOwner(“totong”); medal.setType(“Gold medal”); session.save(user); session.close(); } | |
a) | 配置文件配置有误 | |
b) | 没有在配置文件中包含对映射文件的声明 | |
c) | 配置文件配置有误 | |
d) | 没有对持久化操作捕捉异常 | |
e) | 没有开启事务 |
59) | 已知wage.getItem().size()的值是1。要想使执行session.update(wage)时自动执行session.update(wage.getItems().get(0)),必须配置 | |
a) | <set name=”items” inverse=”true” cascade=”none”>…</set> | |
b) | <set name=”items” inverse=”false” cascade=”none”>…</set> | |
c) | <set name=”items” inverse=”true” cascade=”all”>…</set> | |
d) | <set name=”items” inverse=”false” cascade=”save-update”>…</set> |
60) | 已知系统中的tbl_user表对应的实体类是User,下列HQL语句中正确的是(选两项) | |
a) | from User | |
b) | select * from tbluser | |
c) | select User from User | |
d) | from User u where u.uname=”15″ |
问答题
1.Hibernate的检索方式
答:①导航对象图检索 ②OID检索 ③HQL检索 ④QBC检索 ⑤本地SQL检索
2. Forward与Global-Forward的区别
答:Forward是根据Action return的值找到对应的JSP页。当多个Action共同return同一个值时,可将这个Forward元素写在Global-Forward中。
3.持久化对象的三种状态,代表含义。
答: 临时状态——刚用new语句创建,未被持久化,不处于session的缓存中。
持久化状态——已经被持久化,处于session的缓存中。
游离态——已经被持久化,但不处于session的缓存中。
4、三种检索策略是什么,分别适用于哪种场合?
答:立即检索——
优点:对应用程序完全透明,缺点:select语句数目多。适用:类级别。
延迟检索——
优点: 由应用程序决定加载哪些对象,可以避免执行多余的select语句以及避免加载不需要访问的对象,节省内存空间,提高检索效率。
缺点: 应用程序如果要访问游离态的代理类实例,必须保证它在持久化时已经被初始化。
适用: 一对多或多对多关联。应用程序不需要立即访问或者根本不会访问的对象。
迫切左外连接检索:
优点:对应用程序完全透明,不管对象处于持久化状态还是游离状态,应用程序都可以方便的从一个对象导航到另一个与它相关联的对象。使用了外连接,select语句数目少。
缺点:可能会加载程序不许要访问的对象。复杂的数据库表连接形象检索性能。
适用:一对一或多对一关联。应用程序需要立即访问的对象。数据库系统具有良好的表连接性能。
4、ORM解决的不匹配问题(域模型与关系模型之间存在的不匹配)
答: 域模型是面向对象的,关系模型是面向关系的。
域模型中有继承关系,关系模型中不能直接表示继承关系。
域模型中有多对多关联关系,关系模型中通过连接表来表示多对多关联关系。
域模型中有双向关联关系,关系模型中只有单向参照关系,而且总是many参照one方。
域模型提倡精粒度模型,关系模型提倡粗粒度模型。
5、映射继承关系的三种方式?P 424
答:(1)继承关系树的每个具体类对应一张表:在具体类对应的表中,不仅包含和具体类属性对应的字段,还包括与具体类的父类属性对应的字段。
(2)继承关系树的根类对应一张表:在根类对应的表中,不仅包括根类属性对应的字段,
还包括根类的所有子类属性对应的字段。
(3)继承关系树中的每个类对应一张表,每个表中只包括和这个类本身属性对应的字段,子类的表参照父类对应的表。
6、Session的find()方法以及Query接口的区别。
答案Session类的find()方法以及Query接口都支持HQL检索方式。这两者的区别在于,前者只是执行一些简单HQL查询语句的便捷方法,它不具有动态绑定参数的功能,而且在Hibernate3.x版本中,已经淘汰了find()方法;而Query接口才是真正的HQL查询接口,它提供了以上列出的各种查询功能。
7.ibernate的配置文件(hibernate.properties)中 hibernate.show_sql=true/flase
在开发阶和测试段应设置为()在发布阶段应设置为();true\false
8.映射一对多双向关联关系中设置SET元素:
请写出级联保存和更新、级联删除应在set元素中需要设置那些子元素?(标明关系、避面重复执行多余SQL语句)
Name cascade key column one-to-many inverse
9.list要的实现类有那些? 并按照存储结构、机制简单的说一下。
LinkedList、ArryList、Vector。
LinkedList 采用链表数据结构、ArryList代表大小可变的数组。
Vector与ArryList功能比较相似,区别在于Vector采用同步、ArryList没有采用。
10:以下哪个不是Hibernate的检索方式:
A、导航对象图检索 B、OID检索 C、ORM检索
D、QBC检索 E、本地SQL检索 F、HQL检索
答案:C
11.持久化类的类名是Customer.java,写出相应的映射文件名 。
答案:Customer.hbm.xml
12.继承的三种方式
(1)继承关系树的每个具体类对应一张表:在具体类对应的表中,不仅包含和具体类属性对应的字段,还包括与具体类的父类属性对应的字段。
(2)继承关系树的根类对应一张表:在根类对应的表中,不仅包括根类属性对应的字段,还包括根类的所有子类属性对应的字段。
(3)继承关系树中的每个类对应一张表,每个表中只包括和这个类本身属性对应的字段,子类的表参照父类对应的表。
13. Session接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。
14.请简述Session的特点有哪些?
答案:
(1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
(2)Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
(3)在Session 中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。
12、Hibernate中采用XML文件来配置对象-关系映射的优点有那些?
答案:Hibernate既不会渗透到上层域模型中,也不会渗透到下层数据模型中。软件开发人员可以独立设计域模型,不必强迫遵守任何规范。数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。
13、在Hibernate应用中Java对象的状态有哪些?
答案:
1临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。
2持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。
3游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。
14、 叙述Session的缓存的作用
答案:
(1)减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。
(2)保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。
15、 比较Hibernate的三种检索策略优缺点;
答案:
1立即检索;
优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象;
缺点:1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间;
2延迟检索:
优点:
由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间;
缺点:
应用程序如果希望访问游离状态代理类实例,必须保证他在持久化状态时已经被初始化;
3 迫切左外连接检索
优点:
1对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地冲一个对象导航到与它关联的对象。
2使用了外连接,select语句数目少;
缺点:
1 可能会加载应用程序不需要访问的对象,白白浪费许多内存空间;2复杂的数据库表连接也会影响检索性能;
16、 多个事务并发运行时的并发问题有哪些?
答案 第一类丢失更新;脏读;虚读;不可重复读;第二类丢失更新;
17、ORM解决的不匹配问题(域模型与关系模型之间存在的不匹配)
答: 域模型是面向对象的,关系模型是面向关系的。域模型中有继承关系,关系模型中不能直接表示继承关系。域模型中有多对多关联关系,关系模型中通过连接表来表示多对多关联关系。域模型中有双向关联关系,关系模型中只有单向参照关系,而且总是many参照one方。域模型提倡精粒度模型,关系模型提倡粗粒度模型。
18、session的清理和清空有什么区别?
session清理缓存是指按照缓存中对象的状态的变化来同步更新数据库;清空是session关闭;
19.请简述Session的特点有哪些?
答案:
(1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
(2)Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
(3)在Session 中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。
20. 如下图 A、B、C请 添上字段,通过 表C建立 表 A 、表B 的双向关系 (要求简单连线)
表B
|
|
|
|
|
|
|
|
|
表 A
|
|
|
|
|
|
|
|
|
表C
|
|
|
|
|
|
|
|
|
版权声明:感觉我写的还算不错的的话希望你能够动动你的鼠标和键盘为我点上一个赞或是为我奉献上一个评论,在下感激不尽!_______________________________________________________欢迎转载,希望在你转载的同时,添加原文地址,谢谢配合