Hibernate复习题1含答案

更新时间:2023-12-24 14:16:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

美斯坦福在线考试系统 荆州理工G3 Hibernate

科目: SCCEG3Hibernate总分: 100分时间: 60分钟

一、单选题 (共45题,每题2分,说明:选择一项正确的答案)

1、

下面关于Hibernate的说法,错误的是( )

A、Hibernate是一个“对象-关系映射”的实现 B、Hibernate是一种数据持久化技术

C、Hibernate是JDBC的替代技术 他是对JDBC做了轻量级的对象封装 D、使用Hibernate可以简化持久化层的编码 参考答案: C

2、

在使用了Hibernate的系统中,要想在删除某个客户数据的同时删除该客户对应的所有订单数据,下面方法可行的是( )

A、配置客户和订单关联的cascade属性为save-update B、配置客户和订单关联的cascade属性为all C、设置多对一关联的inverse属性为true D、设置多对一关联的inverse属性为false 参考答案: B

详解

3、

下面一对多关联的配置中,存在哪些错误( ) <set name=\> <one-to-many class=\ column=\> </set>

A、inverse属性不可以设置为false B、cascade属性不可设置为true

C、class=\com.x.entity.Order\应为type=\ D、column属性不可再<one-to-many>节点内设置 参考答案: B

4、

下面创建Criteria对象的语句中正确的是( )

A、Criteria c = query.createCriteria(); B、Criteria c = query.addCriteria(); C、Criteria c = session.createCriteria();

D、Criteria c = session.createCriteria(User.class); 参考答案: D

5、

下面关于Hibernate映射文件配置中dynamic-update属性说法正确的是( )

详解

A、动态的修改,如果为true,只改变有改变的属性 B、动态的修改,如果为true,只改变没有改变过的属性 C、动态的修改,如果为true,改变所有的属性 D、以上说法都错 参考答案: A

6、

下面关系Hibernate对象的状态说话正确的是( )临时 持久化 游离

A、Hibernat的对象只有一种状态

B、Hibernat的对象有2种状态 C、Hibernat的对象有3种状态 D、Hibernat的对象有4种状态 参考答案: C

7、

Hibernate对象从瞬时到持久状态转换的方式有( )。

A、调用session的save方法 saveorupdat B、调用session的create方法 C、调用session的update方法 D、调用session的load方法 参考答案: A

8、

J2EE中往往使用____封装业务实体,____封装业务逻辑,____调用( A、实体Bean、会话 Bean、实体Bean、会话 Bean B、实体Bean、会话 Bean、会话Bean、实体Bean C、会话Bean、实体Bean、实体Bean、会话 Bean D、会话Bean、实体Bean、会话Bean、实体Bean 参考答案: B

9、

EJB分为( )三种类型

A、会话bean、实体bean、Web service B、会话bean、实体bean、消息驱动bean

C、Jsp、servlet、jsf

D、实现类、Home接口类、Object接口类 参考答案: B

10、

有状态Session Bean和无状态Session Bean的区别说法正确的是( )

详解

A、无状态Session Bean要保存客户端的状态,同客户端是一对一 B、有状态Session Bean要保存客户端的状态,同客户端是一对一 C、他们都要保存客户端的状态,同客户端是一对一 D、以上说法都不对 参考答案: B

11、

有以下代码段,下面说法正确的是( ) p65

String qlString = \ model.createDate = ?1\ (1)

Query query = em.createQuery(qlString); (2) query.setParameter(0, \ (3) List list = q.list(); (4)

A、第一行有错,必须为参数起个名字 B、第三行有错误,query.setParameter(0,

\应为query.setParameter(1, \ C、第四行没有错误 D、这些语句没有错误 参考答案: B

12、

在EJB3.0中用来保存一个对象的方法是( )

A、save B、update C、persist D、create 参考答案: C

13、

在J2EE中,Servlet和JSP组件必须在( )容器中才能运行

A、Applet B、客户端 C、Web D、EJB 参考答案: C

14、

在J2EE中,EJB组件必须在( )容器中才能运行

A、Applet B、客户端 C、Web D、EJB 参考答案: D

15、

在三层结构中,数据访问层承担的责任是( )

A、定义实体类

B、数据的增删改查操作

29、

使用Hibernate的QBC查询,要使用SQL中的类似select count(*) from tablename方法求出记录数,必须使用( )类

A、Restrictions B、Projections C、Criteria D、Criteron 参考答案: B

30、

在Hibernate中,关于数据库的方言,下面说法正确的是( )

A、可以不写数据库方言

B、数据库方言没有作用,可以随便写 C、有通用的数据库方言可以使用

D、数据方言对应于每个数据库,主要用于产生SQL语句 参考答案: D

31、

下面不属于持久化的是( )

A、把对象转换称字符串的形式通过网络传输,在另一端接收到这个字符串后能把对象还原出来

B、把程序数据从数据库中读出来

C、从XML配置文件中读取程序的配置信息 D、把程序数据保存为文件 参考答案: A

32、

下面的程序执行后没有报错,但数据总保存不到数据库,最可能的原因是( )

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、没有开启事务 参考答案: E

33、

已知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> 参考答案: D

34、

在Hibernate关系映射配置中,inverse属性的含义是( )。

A、定义在<one-to-many>节点上,声明要负责关联的维护 B、声明在<set>节点上,声明要对方负责关联的维护

C、定义在<one-to-many>节点上,声明对方要负责关联的维护 D、声明在<set>节点上,声明要负责关联的维护 参考答案: B 35、

执行下面的hql查询,关于返回值的说法,正确的是( select u.username,u.userid from com.scce.pojo.User u where u is not null A、语法错误,不能执行

B、返回一个类型为List的实例 C、返回一个数组

D、当返回结果只有一条时,返回一个数组 参考答案: B 36、

以下哪一种检索策略利用了外连结查询( ) A、立即检索 B、延迟检索

C、迫切左外连结检索 D、迫切右外连结检索 参考答案: C

37、

POJO是( )

A、Plain Old Java Object

B、Programming Object Java Object C、Page Old Java Object D、Plain Object Java Old 参考答案: A

38、

实现equals和hashCode最显而易见的作用是(

详解38

A、比较两个对象标识符的值 B、比较数据库的两条数据

C、比较两个组建是否部署在同一个应用服务器上 D、对象与字段的映射 参考答案: A

39、

在源代码中嵌入映射信息需要( )

A、XDoclet B、EJB

C、Hibernate D、Spring 参考答案: A

40、

所有的Hibernate,除了( )都支持空(null)语义

A、Collection B、Element C、Entity D、NodeList 参考答案: A

41、

( )元素把子对象的一些元素与父类对应的表的一些字段映射起来

A、Component B、Element C、Attribute D、ActionForm 参考答案: A

42、

HQL不支持聚合函数有( )

A、count(*) B、avg(…) C、count(…) D、count(?) 参考答案: D

43、

假设实体映射时有一个( )的关联指向另外一个实体,在查询时必须也返回那个实体,否则会导致发生一个”column not found”的数据库错误

A、many-to-one B、many-to-many C、one-to-many D、one-to-one 参考答案: D

44、

在Hibernate中,关于数据库的方言,下面说法正确的是(

A、可以不写数据库方言

B、数据库方言没有作用,可以随便写 C、有通用的数据库方言可以使用

D、数据方言对应于每个数据库,主要用于产生SQL语句 参考答案: D

45、

下列属于多对一关系的是( )

A、书和作者

B、手机和生产厂家

C、用户和发布的出租信息 D、士兵和班长 参考答案: D

) 二、多选题 (共5题,每题2分),说明:选择多项正确的答案)

1、

从持久化状态到临时状态转换的方法有( )[选三项] A、evict() B、clear() C、close() D、lock()

参考答案: ABC 2、

有如下代码

Dept deptOne = new Dept();

deptOne.setDeptName(\后勤部\ deptOne.setCreateDate(\ session.save(deptOne);

Integer deptId = deptOne.getDeptId(); deptOne = null;

下面说明正确的有( )[选两项] A、deptOne处于生命周期 B、deptOne生命周期结束 C、deptOne处于持久化状态 D、deptOne处于游离状态 参考答案: AC 3、

Hibernate缓存主要从哪些方面发生作用( A、通过主键值加载数据 B、查询数据 C、立即加载

[选两项] 见书P84

详解5

D、延迟加载 参考答案: AD

4、

什么是Hibernate一级缓存( )[选两项]

A、Hibernate一级缓存是Session的缓存

B、Hibernate一级缓存是SessionFactory的缓存

C、第一级缓存为必需,不允许且事实上也无法被卸除 D、第一级缓存可以设置 参考答案: AC

5、

不适合放入Hibernate二级缓存的有( )[选三项]

A、常被修改的数据

B、绝不容许出现并发的数据,例如财务数据 C、与其他应用共享的数据 D、常用数据 参考答案: ABC

Hibernate中dynamic-insert和dynamic-update 设置属性默认值

Hibernate允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中

1)元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true

2)元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true

3)元素 mutable属性:设置为false就是把所有的元素的update属性设置为了false,说明这个对象不会被更新,默认true

4)元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false

5)元素 dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false

6)元素 dynamic-insert属性:设置为true,表示把所有的元素的dynamic-insert属性设置为true,默认false

7)元素 dynamic-update属性:设置为true,表示把所有的元素的dynamic-update属性设置为true,默认false

Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.

详解10

现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反: 有状态和无状态会话bean的本质区别是它们的生命期。 首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。 有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。 无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。

详解20

Hibernate 提供了 3 种检索策略: l 延迟检索; l 立即检索;

l 迫切左外连接;

Hibernate 提供 2 种方式来确定检索策略,一中是在配置文件当中,另外一种是在程序种设置。当然,如果你在程序中设置了检索策略,那么你在配置文件中的设置也就无效了。另外的一种情况是 HQL 会忽略配置文件的设置,而总是采用迫切左外连接。

详解38

原因是由于在Hibernate中,需要保证持久化标识(数据库的行)和仅在特定会话范围内的Java标识是等值的。我们必然希望Set有明确的语义,以避免混合了来自不同会话中获取的实例,从而确保数据的持久化不会发生错误。

若使用过Set,你会知道Set中是不允许存储重复值的,这也是为什么Hibernate推荐在多表关联的映射中采用Set作为存储实体对象的主要原因。

详解3

1.明确inverse和cascade的作用

inverse 决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-many或many-to-many有效(因 为只有这两种关联关系包含集合,而one-to-one和many-to-one只含有关系对方的一个引用)。

cascade决定是否把对对象的改动反映到数据库中,所以cascade对所有的关联关系都起作用(因为关联关系就是指对象之间的关联关系)。

2.inverse属性 :inverse所描述的是对象之间关联关系的维护方式。

inverse只存在于集合标记的元素中 。Hibernate提供的集合元素包括

Inverse属性的作用是:是否将对集合对象的修改反映到数据库中。

inverse属性的默认值为false,表示对集合对象的修改会被反映到数据库中;inverse=false 的为主动方,由主动方负责维护关联关系。

inverse=”true” 表示对集合对象的修改不会被反映到数据库中。

为了维持两个实体类(表)的关系,而添加的一些属性,该属性可能在两个实体类(表)或者在一个独立的表里面,这个要看这双方直接的对应关系了: 这里的维护指的是当主控放进行增删改查操作时,会同时对关联关系进行对应的更新。

一对多: 该属性在多的一方。应该在一方的设置 inverse=true ,多的一方设置 inverse=false(多的一方也可以不设置inverse属性,因为默认值是false),这说明关联关系由多的一方来维护。如果要一方维护关 系,就会使在插入或是删除\一\方时去update\多\方的每一个与这个\一\的对象有关系的对象。而如果让\多\方面维护关系时就不会有update 操作,因为关系就是在多方的对象中的,直指插入或是删除多方对象就行了。显然这样做的话,会减少很多操作,提高了效率。

注:

单向one-to-many关联关系中,不可以设置inverse=\因为被控方的映射文件中没有主控方的信息。

多对多: 属性在独立表中。inverse属性的默认值为false。在多对多关联关系中,关系的两端 inverse不能都设为false,即默认的情况是不对的,如果都设为false,在做插入操作时会导致在关系表中插入两次关系。也不能都设为 true,如果都设为true,任何操作都不会触发对关系表的操作。因此在任意一方设置inverse=true,另一方inverse=false。

一对一: 其实是一对多的一个特例,inverse 的设置也是一样的,主要还是看关联关系的属性在哪一方,这一方的inverse=false。

多对一: 也就是一对多的反过来,没什么区别。 2.cascade属性

cascade属性的作用是描述关联对象进行操作时的级联特性。因此,只有涉及到关系的元素才有cascade属性。

具 有cascade属性的标记包括

注意:是用在集合标记内部的,所以是不需要cascade属性的。

级联操作:指当主控方执行某项操作时,是否要对被关联方也执行相同的操作。

3.inverse和cascade的区别 作用的范围不同:

Inverse是设置在集合元素中的。

Cascade对于所有涉及到关联的元素都有效。

没有inverse属性,但有cascade属性

执行的策略不同

Inverse 会首先判断集合的变化情况,然后针对变化执行相应的处理。

Cascade 是直接对集合中每个元素执行相应的处理 执行的时机不同

Inverse是在执行SQL语句之前判断是否要执行该SQL语句

Cascade则在主控方发生操作时用来判断是否要进行级联操作

执行的目标不同

Inverse对于处理方式不相同。

对于,inverse所处理的是对被关联表进行修改操作。

对于,inverse所处理的则是中间关联表

Cascade不会区分这两种关系的差别,所做的操作都是针对被关联的对象。

总结:

中,建议inverse=”true”,由“many”方来进行关联关系的维护

中,只设置其中一方inverse=”false”,或双方都不设置

Cascade,通常情况下都不会使用。特别是删除,一定要慎重。

操作建议

一般对many-to-one和many-to-many不设置级联,这要看业务逻辑的需要;对one-to-one和one-to-many设置级联。

many-to-many关联关系中,一端设置inverse=”false”,另一端设置为inverse=”true”。在one-to-many关联关系中,设置inverse=”true”,由多端来维护关系表

本文来源:https://www.bwwdw.com/article/2735.html

Top