hibernate最新练习题

上传人:第*** 文档编号:34065100 上传时间:2018-02-20 格式:DOC 页数:9 大小:63KB
返回 下载 相关 举报
hibernate最新练习题_第1页
第1页 / 共9页
hibernate最新练习题_第2页
第2页 / 共9页
hibernate最新练习题_第3页
第3页 / 共9页
hibernate最新练习题_第4页
第4页 / 共9页
hibernate最新练习题_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《hibernate最新练习题》由会员分享,可在线阅读,更多相关《hibernate最新练习题(9页珍藏版)》请在金锄头文库上搜索。

1、Hibernate 练习题1. 一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)ABCA)表对应类B)记录对应对象C)表的字段对应类的属性D)表之间的参考关系对应类之间的依赖关系2.试述 load()和 get()的区别。1.从返回结果上对比:load 方式检索不到的话会抛出 org.hibernate.ObjectNotFoundException 异常get 方法检索不到的话会返回 null2.从检索执行机制上对比: get 方法和 find 方法都是直接从数据库中检索 而 load 方法的执行则比较复杂首先查找 session 的 persistent Context 中是否

2、有缓存,如果有则直接返回 如果没有则判断是否是 lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常 如果是 lazy 则需要建立代理对象,对象的 initialized 属性为false,target 属性为 null 在访问获得的代理对象的属性时 ,检索数据库,如果找到记录则把该记录的对象复制到代理对象的 target 上,并将 initialized=true,如果找不到就抛出异常。hibernate 对于 load 方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于 get 方 法,hibernate 一定要获取

3、到真实的数据,否则返回 null。3.简述使用 Hibernate 完成持 3 久化操作的 3 个准备和 7 个步骤。1.创建 Congfigure 对象。读取并解析配置文件(相当于使用数据源(DataSource)获取连接前读取DataSource 的配置文件):Configuration conf=new Configuration().configure();2.读取并解析映射信息,创建 SessionFactory(相当于创建了数据源(DataSource)对象),它是产生Session 对象实例的工厂,它是唯一的。:SessionFactory sf=conf.buildSessio

4、nFactory();3.创建 Session 对象,打开 session(相当于 JDBC 获得数据库的连接):Session session=sf.openSession();4.开始一个事务(增删改必须,查可选):tx=sessionl.beginTransaction();5.持久化操作:session.save(user);6.结束事务:mit();7.关闭 session,释放数据库的链接:session.close();三个准备如下:1.需要的 jar 包2.Hibernate 配置文件3.实体类和映射文件注:于 JDBC 类似,持久化操作要放在 try语句块中,如果发生异常则将

5、事物回滚。关闭 session 的语句放在 finally语句块中。4. 在持久化层,对象分为哪些状态?(多选)ACDA)临时状态B)独立状态C)游离状态D)持久化状态5. 事务隔离级别是由谁实现的?(单选)CA)Java 应用程序B)HibernateC)数据库系统 D)JDBC 驱动程序6.假设对 Customer 类的 orders 集合采用延迟检索策略,编译或运行以下程序,会出现什么情况(单选)CSession session=sessionFactory.openSession();tx = session.beginTransaction();Customer customer=(

6、Customer)session.get(Customer.class,new Long(1);mit();session.close();Iterator orderIterator=customer.getOrders().iterator();A)编译出错 B)编译通过,并正常运行 C)编译通过,但运行时抛出异常7. 以下程序代码对 Customer 的 name 属性修改了两次:tx = session.beginTransaction();Customer customer=(Customer)session.load(Customer.class,new Long(1);custo

7、mer.setName(Jack);customer.setName(Mike);mit();执行以上程序,Hibernate 需要向数据库提交几条 update 语句?(单选)BA)0 B)1 C)2 D)38. 以下关于 SessionFactory 的说法哪些正确?(多选) BCA)对于每个数据库事务,应该创建一个 SessionFactory 对象B)一个 SessionFactory 对象对应一个数据库存储源。C)SessionFactory 是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。D)SessionFactory 的 load()方法用于加载

8、持久化对象9. Customer 类中有一个 Set 类型的 orders 属性,用来存放 Order 订单对象,在Customer.hbm.xml 文件中,用哪个元素映射 orders 属性?AA) B) C) D)10. 元素有一个 cascade 属性,如果希望 Hibernate 级联保存集合中的对象,casecade 属性应该取什么值?(单选)DA)none B)save C)delete D)save-update11.试述 Hibernate 有哪些检索方式?HQL 检索方式QBC 检索方式本地 SQL 检索方式12.对于以下程序,Customer 对象在第几行变为游离状态?(单

9、选)FCustomer customer=new Customer(); /line1customer.setName(Tom); /line2Session session1=sessionFactory.openSession(); /line3Transaction tx1 = session1.beginTransaction(); /line4session1.save(customer); /mit(); /line5session1.close(); /line6A) line1 B)line2 C)line3 D)line4 E)line5F)line613. 如何优化 Hib

10、ernate 查询性能?1 )lazy=true, hibernate3 开始已经默认是 lazy=true 了;lazy=true 时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非 id 字段)时才会发生查询动作。 2)二级缓存, 在对象更新,删除,添加相对于查询要少得多时, 二级缓存的应用将不怕 n +1 问题,因为即使第一次查询很慢,之后直接缓存命中也是很快的。 14. 以下程序的打印结果是什么? Ctx = session.beginTransaction();Customer c1=(Customer)session.load(Customer.class,new Long

11、(1); Customer c2=(Customer)session.load(Customer.class,new Long(1); System.out.println(c1=c2);mit();session.close();A)运行出错,抛出异常 B)打印 falseC)打印 true D)运行通过,但什么都不显示15. 下面关于 hibernate 核心接口说明错误的是? BA)Configuration 接口:配置 Hibernate,根据其启动 hibernate,创建SessionFactory 对象;B)SessionFactory 接口:负责保存、更新、删除、加载和查询对象

12、,是线程不安全的,避免多个线程共享同一个 session,是轻量级、一级缓存 ;C)Query 和 Criteria 接口:执行数据库的查询;D)Transaction 接口:管理事务。16. 下面代码的执行效果是( A ) 。String hql = from TblStudent s order by s.score desc;Query query = session.createQuery(hql);query.setFirstResult(0);query.setMaxRexults(5)return query.list();A)返回分数最高的 5 个学生B)返回分数最高的 6 个

13、学生C)返回分数最低的 5 个学生D)返回分数最低的 6 个学生17. 下面( AB )不是 Hibernate 映射文件中包含的内容。 (选 2 项)A)数据库连接信息 B)Hibernate 属性参数C)主键生成策略 D)属性数据类型18. 下面是某系统中的两个实体类,依次可以得知( B ) 。public class Wage /月工资实体类private Long wid;private String empName; /雇员姓名private String month; /月份/Getter & Setterpublic class WageItem /工资项private Wage

14、 wage;private Long iid;private String itemName; /项目名称private String amount; /数额/Getter & SetterA)Wage 和 WageItem 间存在单向一对多的关联B)Wage 和 WageItem 间存在单向多对一的关联C)Wage 和 WageItem 间存在双向一对多的关联D)Wage 和 WageItem 间存在双向多对一的关联20. 下面程序执行后没有报错,但数据总保存不到数据库,最可能的原因是( E) 。public static void main(String args)SessionFacto

15、ry sf =new Configuration().configure().buildSessionFactory();Session session = sf.openSession();Medal medal=new Medal();medal.setOwner(Lily);medal.setSport(Table Tennis-Women s Singles);medal.setType(Glod Medal);session.save(medal);session.close();A)没有在配置文件中包含对映射文件的声明B)配置文件配置有误 C)映射文件配置有误D)没有对持久化操作捕

16、捉异常 E)没有开启事务21. 下面( A )不属于关系-对象映射的映射信息。A).程序包名到数据库库名的映射B).程序类名到数据库表名的映射C).实体属性名到数据库表字段的映射D).实体属性类型到数据库表字段类型的映射22. 对下面代码中存在的错误,说法不正确的是( D ) 。String hql = from TblUser u where u.status = status;/Query query = session.createQuery();/query.setNamedParameter(:status, );/return query.executeQuery(hql);/A)第一行中的命名参数status 应该是:statusB)第二行 createQuery 函数应该传入

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号