Hibernate面试题汇总_第1页
Hibernate面试题汇总_第2页
Hibernate面试题汇总_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、hibernate是什么?hibernate是基十'ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的数据持久化的工具HttpSession与Hibernate中Session的区别javax.servlet.http.HttpSession是一个抽象接口用途:存放这个用户的一些经常被用到的信息,例如:用户名,权限等它是hibernate操作数据库的一个句柄对象手动或者通过业务层获取0.Hibernate介绍Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hiberna

2、te可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。3. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从

3、一对一到多对多的各种复杂关系。I. Hibernate有哪几种查询数据的方式OID查询(2)HQL(3)QBC(4)本地SQL2.load()和get()的区别load加载方法:Usersuser=(Users)session.load(Users.class,userid);get加载方法:Usersuser=(Users)session.get(Users.class,userid);两加载方法区别:区别1:如果数据库中,没有userid的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user

4、.getPassword()会抛出异常:org.hibernate.ObjectNotFoundException;区别2:load支持延迟加载,get不支持延迟加载。也就是说:Usersuser=(Users)session.load(Users.class,userid);这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。而:Usersuser=(Users)session.get(Users.class,userid);则立即去执行数据库查询。所以Usersuser=(Users)session.load(Users.class,userid)不会执行任何sql。汪息

5、:Usersuser=(Users)session.load(Users.class,userid);System.out.println(user.getid();上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userid的值,但是当你getid()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。1. 2.1请解释Session的load方法和get方法的不同;以及Query的list和iterate方法的不同load():现在session缓存中寻找,如果

6、找到了返回该对象,如果没找到,程序会新建一个对象,并且返回,存在session中,不会在数据库中查找,在程序中如果没有用到这个实体类,可以节省一次数据库连接。如果在程序中用到了这个实体类,这个实体类就会在数据库去查找,如果没有查找到就会抛异常。(延时加载)get():在缓存在查找,如果找到该对象,返回该对象。如果没找到,会到数据库中查找,如果数据库中有则返回该对象,如果没找到这返回空。(立即加载)list():一次返回所有对象iterate():一次返回所有对象的id,遍历到某个对象的时候再去查询指定对象Hibernate工作原理及为什么要用?原理:读取并解析配置文件读取并解析映射信息,创建S

7、essionFactory打开Sesssion创建事务Transation持久化操作提交事务关闭Session关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。3. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。5.0.Hibernate中怎样实现类

8、之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、说下Hibernate的缓存机制内部缓存存在Hibernate中又叫一级缓存,属于应用事务级缓存二级缓存:第三方插件支持查询缓存依赖于二级缓存一级、二级缓存缓存实体对象,查询缓存依赖于二级缓存,缓存属性8.Hibernate实体对象的三种状态之间如何转换当对象由瞬时状态(Transient)一save()时,就变成了持久化状态。当我们在Session

9、里存储对象的时候,实际是在Session的Map里存了一份,(Persistent)new创建对象,此时的对象就是瞬也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持久对象Session一Close()了,它的缓存也都关闭了,整个Session也就失效了,这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。当游离状态(Detached)update()时,又变为了持久状态(Persistent)。当持久状态(Persistent)delete()时,又变为了瞬时状态(Transient),此时,数据库中没有与之对应的记录。1) Hibernate实

10、体对象的3种状态瞬时态:也称之为临时态,这种状态的实体对象从未与数据库发生关系,当我们通过时状瞬时状态无数据库记录,无主键(assigned除外),不在session中持久态:此状态下的实体对象在数据库有一条数据是跟它是对应的,我们大多数情况下都是在持久态中操作实体,是最常见的一种状态,此时,对象与session处于关联阶段。2) 持久状态有数据库记录,有主键,在session中游离(脱管)态:曾经与session关联过,在数据库中有一条数据是与之对应的,对象与session没有关联。1. 游离状态有数据库记录,有主键,不在session中update()和saveOrUpdate()的区别?

11、update()和saveOrUpdate()是用来对跨Session的PO进行状态管理的。update()方法操作的对象必须是持久化了的对象。也就是说,如果此对象在数据库中不存在的话,就不能使用update()方法。saveOrUpdate()方法操作的对象既可以使持久化了的,也可以使没有持久化的对象。如果是持久化了的对象调用saveOrUpdate()则会更新数据库中的对象;如果是未持久化的对象使用此方法,则save到数据库中Hibernate与spring的联系hibernate中的一些对象可以给Spring来管理,让Spring容器来创建hibernate中一些对象实例化。例如:Ses

12、sionFactory,HibernateTemplate等。Hibernate本来是对数据库的一些操作,放在DAO层,而Spring给业务层的方法定义了事务,业务层调用DAO层的方法很好的将Hibernate的操作也加入到事务中来了。11. Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?1、hibernate自带的分页机制:获得Session对象后,从Session中获得Query对象。用Query.setFirstResult():设置要显示的第一行数据,Query.setMaxResults():设置要显示的最后一行数据。2、不使用h

13、ibernate自带的分页,可采用sql语句分页,如:5:为每页显示的记录,2为当前页:select*top5fromtablewheretabidnotin(selecttabidtop(2-1)*5fromtable);select*from(selects.*,rownumasrnfrom(select*fromstudentorderbytdatedesc)whererownum<=endindex)wherern>=startindex;16.hibernate.cfg.xml文件的作用该配置文件主要用来描述数据库连接的相关信息,以及该应用中关心映射文件所在的位置,和一些

14、其他的设置,该文件一般放在项目的根目录下。23. hibernate中常见的关联关系有那3种?那种事最常见的一对一一对多多对多一对多最常见hibernate中的cascade属性的作用:级联操作<set>、<many-to-one>等元素的cascade属性级联取值nonesave-update:级联保存或修改delete:级联删除all:save-update+deleteall-delete-orphan:all并且delete-orphan(删除无关联1端的实体)hql中能否使用max(),sum(),count()等聚合函数?能hql中能否使用Groupby进行

15、分组?能Hql中query.uniqueResult()和query.list()的区别?前者指返回一个对象,后者返回一个list集合简述一下qbcqbc(querybycriteria)这种api封装了sql语句的动态拼接,对查询提供了更加面向对象的功能接口请解释为什么SessionFactory一般以单例方式使用SessionFactory是一个大型对象,而且线程安全。在一个程序中只需要一个请解释说明hibernate配置文件中dialect属性的确切含义数据库方言:多种数据库拥有不同的语言语法,通过设置dialect指定所用的数据库,并生成对应语法和语言的sql语句。24. 请解释Hib

16、ernate3.2主键的生成方式中,native和identity方式的区别。Native主键生成方式会根据不同的底层数据库自动选择Identity>SequenceHilo主键生成方式Identity当时根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式12.Hibernate的延迟加载怎么看?当Hibernate查询数据的时候,数据并没有存在于内存中,当数据真正对数据操作时,才存在于内存中,就实现了延迟加载,他节省了服务器内存的开销,从而提升了服务器的性能。在o/rm中java中的类名,属性,对象分别转换为数据库中的什么?A) 类名-表名属性-字段对象-记录(一行)=H

17、ibernate笔试题=一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)表对应类记录对应对象表的字段对应类的属性表之间的参考关系对应类之间的依赖关系以下关于SessionFactory的说法哪些正确?(多选)对于每个数据库事务,应该创建一个SessionFactory对象个SessionFactory对象对应一个数据源。B) SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据源,只需要创建一个。(1) SessionFactory的load()方法用于加载持久化对象Customer类中有一个Set类型的orders属性,用来存放Order订单对象,在

18、Customer.hbm.xml文件中,用哪个元素映射orders属性?<set>B)<one-to-many>C)<many-to-one>D)<property><set>元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)nonesavedeletesave-update以下哪些属于Session的方法?(6) load()save()delete()update()open()close()以下程序的打印结果是什么?(单选)tx=session.beginTr

19、ansaction();Customerc1=(Customer)session.load(Customer.class,newLong(1);Customerc2=(Customer)session.load(Customer.class,newLong(1);System.out.println(c1=c2);mit();session.close();运行出错,抛出异常打印false打印true以下程序代码对Customer的name属性修改了几次:tx=session.beginTransaction();Customercustomer=(Customer)session.load(

20、Customer.class,newLong(1);customer.setName("Jack");customer.setName("Mike");mit();执行以上程序,Hibernate需要向数据库提交几条update语句?(单选)0B)1C)2D)3在持久化层,对象分为哪些状态?(多选)瞬时状态独立状态游离状态持久化状态对于以下程序,Customer对象在第几行变为持久化状态?(单选)Customercustomer=newCustomer();/line1customer.setName("Tom");/line2Ses

21、sionsession1=sessionFactory.openSession();/line3Transactiontx1=session1.beginTransaction();/line4session1.save(customer);/mit();/line5session1.close();/line6A)linelB)line2C)line3D)line4E)line5F)line6对于以下程序,Customer对象在第几行变为游离状态?(单选)Customercustomer=newCustomer。;/line1customer.setName("Tom");/line2Sessionsession1=sessionFact

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论