Hibernate复习题1含答案要点.pdf

上传人:tbuqq 文档编号:5197097 上传时间:2020-02-19 格式:PDF 页数:22 大小:184.12KB
返回 下载 相关 举报
Hibernate复习题1含答案要点.pdf_第1页
第1页 / 共22页
Hibernate复习题1含答案要点.pdf_第2页
第2页 / 共22页
Hibernate复习题1含答案要点.pdf_第3页
第3页 / 共22页
Hibernate复习题1含答案要点.pdf_第4页
第4页 / 共22页
Hibernate复习题1含答案要点.pdf_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《Hibernate复习题1含答案要点.pdf》由会员分享,可在线阅读,更多相关《Hibernate复习题1含答案要点.pdf(22页珍藏版)》请在三一文库上搜索。

1、美斯坦福在线考试系统荆州理工G3 Hibernate 科目 : SCCEG3Hibernate 总分 : 100 分时间 : 60 分钟 一、单选题(共 45 题,每题 2 分,说明 :选择一项正确的答案) 1、 下面关于 Hibernate 的说法,错误的是() A、Hibernate 是一个 “ 对象 -关系映射 ” 的实现 B、 Hibernate 是一种数据持久化技术 C、Hibernate 是 JDBC 的替代技术他是对 JDBC 做了轻量级的对象封装 D、使用 Hibernate 可以简化持久化层的编码 参考答案 : C 2、 在使用了 Hibernate 的系统中, 要想在删除某

2、个客户数据的同时删除该客户 对应的所有订单数据,下面方法可行的是() A、配置客户和订单关联的cascade属性为 save-update B、配置客户和订单关联的cascade属性为 all C、设置多对一关联的inverse 属性为 true D、设置多对一关联的inverse 属性为 false 参考答案 : B 详解 3、 下面一对多关联的配置中,存在哪些错误() set name=“orders“ inverse=“false“ cascade=“true“ one-to-many class=“com.x.entity.Order“ column=“customer_id“ / /

3、set A、 inverse 属性不可以设置为false B、 cascade属性不可设置为true C、 class=“com.x.entity.Order“ 应为 type=“com.x.entity.Order“ D、 column 属性不可再 one-to-many节点内设置 参考答案 : B 4、 下面创建 Criteria 对象的语句中正确的是() A、 Criteria c = query.createCriteria(); B、 Criteria c = query.addCriteria(); C、 Criteria c = session.createCriteria();

4、 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、 Hi

5、bernat 的对象有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、会话 B

6、ean、实体 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 B

7、ean要保存客户端的状态,同客户端是一对一 C、他们都要保存客户端的状态,同客户端是一对一 D、以上说法都不对 参考答案 : B 11、 有以下代码段,下面说法正确的是()p65 String qlString = “select model from Student as model where model.createDate = ?1“; (1) Query query = em.createQuery(qlString); (2) query.setParameter(0, “2000-12-05“); (3) List list = q.list(); (4) A、第一行有错,必须为

8、参数起个名字 B、第三行有错误,query.setParameter(0, “2000-12-05“) 应为 query.setParameter(1, “2000-12-05“); 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 组件必

9、须在()容器中才能运行 A、Applet B、客户端 C、 Web D、 EJB 参考答案 : D 15、 在三层结构中,数据访问层承担的责任是() A、定义实体类 B、数据的增删改查操作 C、业务逻辑的描述 D、页面展示和控制转发 参考答案 : B 16、 set元素有一个cascade属性,如果希望Hibernate 级联保存集合中的对 象, casecade属性应该取( )值 A、 none B、 save C、 delete D、 save-update 参考答案 : D 17、 以下程序的打印结果是() tx = session.beginTransaction(); Custome

10、r c1=(Customer)session.load(Customer.class,new Long(1); Customer c2=(Customer)session.load(Customer.class,new Long(1); System.out.println(c1=c2); mit(); session.close(); A、运行出错,抛出异常 B、打印 false C、打印 true D、编译出错 参考答案 : C 18、 以下程序代码对Customer 的 name 属性修改了两次: tx = session.beginTransaction(); Customer cus

11、tomer=(Customer)session.load(Customer.class, new Long(1); customer.setName(“Jack“); customer.setName(“Mike“); mit(); 执行以上程序,Hibernate 需要向数据库提交()条 update 语句 A、 0 B、 1 C、 2 D、 3 参考答案 : B 19、 对于以下程序, Customer 对象在第 ()行变为游离状态close clear evict P82 Customer customer=new Customer(); customer.setName(“Tom“);

12、 Session session1=sessionFactory.openSession(); Transaction tx1 = session1.beginTransaction(); line1 session1.save(customer); line2 mit(); line3 session1.close(); line4 A、 line1 B、 line2 C、 line3 D、 line4 参考答案 : D 20、 以下检索策略中, ()利用了 外连结查询 详解 20 A、立即检索 B、延迟检索 C、迫切左外连结检索 D、迫切右外连结检索 参考答案 : C 21、 假设对 Cu

13、stomer 类的 orders 集合采用延迟检索策略,编译或运行以下程序, 会出现() Session session=sessionFactory.openSession(); tx = session.beginTransaction(); Customer customer=(Customer)session.get(Customer.class,new Long(1); mit(); session.close(); Iterator orderIterator=customer.getOrders().iterator(); A、编译出错 B、编译通过,正常运行,不显示任何信息 C

14、、编译通过,正常运行,并显示出结果 D、编译通过,但运行时抛出异常 参考答案 : D 22、 在源代码中嵌入映射信息需要() A、Annoation B、 hbm.xml C、 struts.xml D、 web.xml 参考答案 : A 23、 ORM 的好处包括() A、能进行关系对象的映射 B、具有控制器功能 C、能在服务器端保存客户端状态 D、向 DTO 一项能传递数据 参考答案 : A 24、 已知某个实例的持久化标识,可以使用Session的()方法来获取它 A、 load() B、 loadAll() C、 getAllData() D、 init() 参考答案 : A 25、

15、如果不确定所寻找对象的持久化标识符,则需要使用查询,使用Session 的()方法 A、 createQuery() B、 query() C、 queryAll() D、 queryObject() 参考答案 : A 26、 使用 Session的() ,会把对象的状态从数据库中移除 A、 delete() B、 remove() C、 clear() D、 removeAll() 参考答案 : A 27、 对原生 SQL 查询的控制是通过()接口进行的 A、 SQLQuery B、 Session C、 List D、Query 参考答案 : A 28、 可以把结果集映射的信息放在外部的(

16、 ) 元素中,这样就可以在多个命名查询间或者通过setResultSetMapping()API 来访问 A、 resultset B、 result C、 mapping D、 description 参考答案 : A 29、 使用 Hibernate 的 QBC 查询,要使用SQL 中的类似select count(*) from tablename方法求出记录数,必须使用()类 A、 Restrictions B、 Projections C、 Criteria D、 Criteron 参考答案 : B 30、 在 Hibernate 中,关于数据库的方言,下面说法正确的是() A、可以

17、不写数据库方言 B、数据库方言没有作用,可以随便写 C、有通用的数据库方言可以使用 D、数据方言对应于每个数据库,主要用于产生SQL 语句 参考答案 : D 31、 下面不属于持久化的是() A、把对象转换称字符串的形式通过网络传输,在另一端接收到这个字符 串后能把对象还原出来 B、把程序数据从数据库中读出来 C、从 XML 配置文件中读取程序的配置信息 D、把程序数据保存为文件 参考答案 : A 32、 下面的程序执行后没有报错,但数据总保存不到数据库,最可能的原因是 () public static void imain(String args) SessionFactory sf=new

18、 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.getIte

19、m().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 ”

20、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.poj

21、o.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、 实现

22、 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、 ()元素把子对象的一些元素与父类对应的表的一些字段映射起来

23、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 中,关于数据

24、库的方言,下面说法正确的是() 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 deptOn

25、e = new Dept(); deptOne.setDeptName(“后勤部 “); deptOne.setCreateDate(“2001-03-02“); session.save(deptOne); Integer deptId = deptOne.getDeptId(); deptOne = null; 下面说明正确的有()选两项 A、 deptOne 处于生命周期 B、 deptOne 生命周期结束 C、 deptOne 处于持久化状态 D、 deptOne 处于游离状态 参考答案 : AC 3、 Hibernate 缓存主要从哪些方面发生作用()选两项 见书 P84 A、通过主

26、键值加载数据 B、查询数据 C、立即加载 D、延迟加载 参考答案 : AD 4、 什么是 Hibernate 一级缓存()选两项 A、Hibernate 一级缓存是Session的缓存 B、 Hibernate 一级缓存是SessionFactory 的缓存 C、第一级缓存为必需,不允许且事实上也无法被卸除 D、第一级缓存可以设置 参考答案 : AC 5、 不适合放入Hibernate 二级缓存的有()选三项 A、常被修改的数据 B、绝不容许出现并发的数据,例如财务数据 C、与其他应用共享的数据 D、常用数据 参考答案 : ABC 详解 5 Hibernate 中 dynamic-insert

27、和 dynamic-update 设置属性默认值 Hibernate允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中 元素insert 属性 :设置为 false, 在 insert 语句中不包含这个字段,表示永远不 会被插入 ,默认 true 2)元素update属性 :设置为false, 在 update语句中不包含这个字段,表示永 远不会被修改 ,默认 true 3) 元素mutable 属性 :设置为 false 就是把所有的 元素的 update 属性 设置为了false, 说明这个对象不会被更新,默认 true 4)元素dynamic-insert属性

28、 :设置为 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属性 :设置为t

29、rue, 表示把所有的元素的 dynamic-update属性设置为true, 默认 false Hibernate 生成动态SQL语句的消耗的系统资源(比如 CPU,内存等 )是很小的 ,所以不会影 响到系统的性能,如果表中包含N 多字段 ,建议把 dynamic-update属性和 insert 属性设置为true, 这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL 语句的执行 时间 ,提高程序的运行效率. 详解 10 现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用 后的状态,并对下一次调用起作用,而认为无状态是每

30、次调用实例化一次,不保留用户信息。 仔细分析并用实践检验后,你会发现,事实恰好相反:有状态和无状态会话bean 的本质区别 是它们的生命期。首先解释一个下面要用到的概念用户:session bean 的用户实际上就 是直接调用ejb 的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。有状态会话bean :每个用户有自己特有的一个实例,在用户的生 存期内, bean 保持了用户的信息,即“ 有状态 ” ;一旦用户灭亡(调用结束或实例结束),bean 的生命期也告结束。即每个用户最初都会得到一个初始的bean 。 无状态会话bean :bean

31、 一 旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不 一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不 能保持某一用户的状态,所以叫无状态bean 。但无状态会话bean 并非没有状态,如果它有自 己的属性 (变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注 意的。 详解 20 Hibernate 提供了3 种检索策略: l 延迟检索; l 立即检索; l 迫切左外连接; Hibernate 提供2 种方式来确定检索策略,一中是在配置文件当中,另外一种是在程序种设置。 当然,如果你在程序中设置了

32、检索策略,那么你在配置文件中的设置也就无效了。另外的一种 情况是HQL 会忽略配置文件的设置,而总是采用迫切左外连接。 详解 38 原因是由于在Hibernate 中,需要保证持久化标识(数据库的行)和仅在特定会话范围内的Java 标识是等值的。我们必然希望Set 有明确的语义,以避免混合了来自不同会话中获取的实例, 从而确保数据的持久化不会发生错误。 若使用过Set,你会知道Set 中是不允许存储重复值的,这也是为什么Hibernate 推荐在多 表关联的映射中采用Set 作为存储实体对象的主要原因。 详解 3 1明确 inverse 和 cascade的作用 inverse 决定是否把对对

33、象中集合的改动反映到数据库中, 所以inverse 只对集合起作用,也就是只对one-to-many 或 many-to-many 有效(因为只有这两种关联关系包含集合,而 one-to-one 和 many-to-one 只含有关系对方的一个引用)。 cascade 决定是否把对对象的改动反映到数据库中,所以 cascade对所有的关联关系都起作用(因为关联关系就是指对象 之间的关联关系) 。 2.inverse 属性 :inverse 所描述的是对象之间关联关系的 维护方式。 inverse 只存在于集合标记的元素中。Hibernate 提供的集 合元素包括 Inverse 属性的作用是:

34、 是否将对集合对象的修改反映到数 据库中。 inverse 属性的默认值为false,表示对集合对象的修改会被 反映到数据库中;inverse=false 的为主动方,由主动方负责维 护关联关系。 inverse=”true ” 表示对集合对象的修改不会被反映到数据 库中。 为了维持两个实体类(表)的关系,而添加的一些属性, 该属性可能在两个实体类(表)或者在一个独立的表里面,这 个要看这双方直接的对应关系了:这里的维护指的是当主控放 进行增删改查操作时,会同时对关联关系进行对应的更新。 一对多:该属性在多的一方。应该在一方的设置 inverse=true ,多的一方设置inverse=fal

35、se(多的一方也可以不 设置 inverse 属性,因为默认值是false) ,这说明关联关系由多 的一方来维护。 如果要一方维护关系,就会使在插入或是删除 “一“方时去update“多“方的每一个与这个“一“的对象有关系的 对象。而如果让 “多“方面维护关系时就不会有update 操作,因 为关系就是在多方的对象中的,直指插入或是删除多方对象就 行了。显然这样做的话,会减少很多操作,提高了效率。 注: 单 向one-to-many关 联 关 系 中 , 不 可 以 设 置 inverse=“true“, 因为被控方的映射文件中没有主控方的信息。 多对多:属性在独立表中。inverse 属性的

36、默认值为 false。在多对多关联关系中,关系的两端inverse 不能都设为 false,即默认的情况是不对的,如果都设为false,在做插入操作 时会导致在关系表中插入两次关系。也不能都设为true,如果 都设为 true,任何操作都不会触发对关系表的操作。因此在任意 一方设置 inverse=true,另一方 inverse=false。 一对一:其实是一对多的一个特例,inverse 的设置也 是一样的,主要还是看关联关系的属性在哪一方,这一方的 inverse=false。 多对一:也就是一对多的反过来,没什么区别。 2.cascade属性 cascade 属性的作用是描述关联对象进

37、行操作时的级联特 性。因此,只有涉及到关系的元素才有cascade属性。 具 有 cascade属性的标记包括 注意: 和 是用在集合标 记内部的,所以是不需要cascade属性的。 级联操作:指当主控方执行某项操作时,是否要对被关联 方也执行相同的操作。 3.inverse 和 cascade的区别 作用的范围不同: Inverse 是设置在集合元素中的。 Cascade对于所有涉及到关联的元素都有效。 没有 inverse 属性,但有 cascade属性 执行的策略不同 Inverse 会首先判断集合的变化情况,然后针对变化执 行相应的处理。 Cascade 是直接对集合中每个元素执行相应

38、的处理 执行的时机不同 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 ”,由多端来维护关系表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1