hibernate面试题汇总
1. 请解释Hibernate3.2主键的生成方式中,native和identity方式的区别。
Native主键生成方式会根据不同的底层数据库自动选择Identity、Sequence、Hilo主键生成方式
特点:根据不同的底层数据库采用不同的主键生成方式。由于Hibernate会根据底层数据库采用不同的映射方式,因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式。
Identity根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式。
特点:与底层数据库有关,要求数据库支持Identity,如
MySQl中是auto_increment,
SQL Server 中是Identity,支持的数据库有MySql、SQL Server、DB2、Sybase和HypersonicSQL。
Identity无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。
2. 请解释为什么SessionFactory一般以单利方式使用。
SessionFactory是一个大型对象,而且线程安全。在一个程序中只需要一个
3. 请解释说明hibernate配置文件中dialect属性的确切含义。
数据库方言:多种数据库拥有不同的语言语法,通过设置dialect指定所用的数据库,并生成对应语法和语言的sql语句。
4,请解释说明Hibernate控制下的POJO<对象>会呈现三种状态,分别是transient、persistenet和detached,请解释这三种状态。
暂态:数据库中没数据。跟session不相关。没存过。
游离态:在数据库中有记录,但是在session中没有。需要手工同步。
持久态:数据库中有记录,session中也有这记录。自动更新
5. 请解释Session的load方法和get方法的不同;
load 在加载的时候会根据加载策略来加载东西,加载策略默认为延迟加载,即只加载id.,如果需要用其它数据,必须在session关闭之前,去加载某一 个属性。lazy="true" or "false" 如果加载策略是立即加载,那么它在加载时会把数据信息全部加载,这个时候即使,关闭session,因为数据已经全部加载了,也能取得数据
get 会直接采用立即加载策略加载数据,不管你配置的是延迟加载还是立即加载
关于立即加载和延迟加载 不仅只对自己这张表,将来表与表之间有关系时,一样会起作用。
如果对象不存在 get返回null load抛异常
6.请解释cascade属性和-orphan的区别。
: 在执行 时进行关联操作。
all--orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点。比如在一个一对多的关系中,Student包含多个book,当在对象关系中删除一个book时,此book即成为孤儿节点。
7.请解释inverse属性的作用
inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse="true"表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。 one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。
8.请解释Hibernate查询中出现的N+1问题,并提出解决方案。
Hibernate在检索与Customer关联的Order对象时,使用了默认的立即检索策略。这种检索策略存在两大不足:
(1) select语句的数目太多,需要频繁的访问数据库,会影响检索性能。如果需要查询n个Customer对象,那么必须执行n+1次select查询语句。这就是经典的n+1次select查询问题。
(2)在应用逻辑只需要访问Customer对象,而不需要访问Order对象的场合,加载Order对象完全是多余的操作,这些多余的Order对象白白浪费了许多内存空间。
为了解决以上问题,Hibernate提供了其他两种检索策略:延迟检索策略和迫切左外连接检索策略。延迟检索策略能避免多余加载应用程序不需要访问的关联对象,迫切左外连接检索策略则充分利用了SQL的外连接查询功能,能够减少select语句的数目。
9.请简要的描述一下使用Hibernate进行大批量更新的经验;
直接使用hibernate API 进行批量更新和批量删除都不推荐,而直接通过JDBC API执行相关的SQl语句或调用相关的存储过程是最佳的方式。
10,请简要的描述一下使用Hibernate二级高速缓存的经验
rnate3的二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;
ionFactory级别的缓存,需要手动配置;所有的session可以共享sessionFactory 级别的缓存;(一般把一些不经常变化的实体对象放到sessionFactory级别的缓存中,适合放不经常变化的实体对象。)
rante3二级缓存的配置和使用方法如下:
必须把包导入,然后到Hibernate3.2的etc文件下把复制到工程src目录下(里边的'参数里边有详细英文说明);
说明:是第三方法的缓存产品,hiberante只是把它做了集成,还有好多第三方hibernate集成的缓存产品,相关说明请查阅hiberante3开发手册;ehcache是不支持分布应用的,如果有分布式需求,请换成支持分布式的二级缓存产品,hiberate3开发手册都有相头说明。配置方法都类似);
rnate3的二级缓存默认是开起的,也可以指定开起。
11,Query的list和iterator方法的不同。
list不会使用缓存,而iterate会先取数据库select id出来,然后一个id一个id的load,如果在缓存里面有,就从缓存取,没有的话就去数据库load。
不管是list方法还是iterate方法,第一次查询的时候,它们的查询方式很它们平时的方式是一样的,list执行一条sql,iterate执行1+N条,多出来的行为是它们填充了缓存
查询缓存需要打开相关类的class缓存。list和iterate方法第一次执行的时候,都是既填充查询缓存又填充class缓存的。
这里还有一个很容易被忽视的重要问题,即打开查询缓存以后,即使是list方法也可能遇到1+N的问题!
-
面试邀请函【精品】
邀请函是商务礼仪与世俗礼仪的其中一部分。在快速变化和不断变革的今天,邀请函在活动中的使用越来越广泛,那么相关的邀请函到底怎么写呢?下面是小编为大家整理的面试邀请函,仅供参考,欢迎大家阅读。面试邀请函1您好!现诚邀您于4月29日下午来我司参加业务员岗位面试,如...
-
面试简历的自我评价汇编15篇
时间一晃而过,我们找工作的时间就要到来,这时一份好的简历可以起到很好的作用哦。简历怎么写才能具有特色?以下是小编帮大家整理的面试简历的自我评价,仅供参考,希望能够帮助到大家。面试简历的自我评价1本人理解接受能力强,喜欢挑战高难度的工作,极强的'责任心来对...
-
面试自我评价(精选15篇)
在平凡的学习、工作、生活中,我们最不陌生的就是自我评价了,自我评价和人生价值选择有着密切的关系。相信很多朋友都对写自我评价感到非常苦恼吧,下面是小编收集整理的面试自我评价,欢迎阅读,希望大家能够喜欢。面试自我评价1我是一个比较谦虚好学的人,态度用心主动,...
-
面试个人简历(15篇)
时间真是转瞬即逝,我们找工作的时间越来越近,这时是不是该好好写一份简历了呢?你知道简历要如何写吗?下面是小编整理的面试个人简历,仅供参考,大家一起来看看吧。面试个人简历1姓名:民族:汉族年龄:26岁联系方式:求职意向及工作经历应聘职位:前台接待/文员/经理助理工作年...
相关文章
- 关于期末的英语作文:The Benefits of Keeping Diaries
- 外研社英语Module5Unit2《There are fourteen peaches》课后反思
- Working English Job Advertisement英文求职
- in the park Unit 1 What are they doing ?教学素材
- 编写谈论考试的对话 Talking about the Examination
- 职场必备英语面试口语:What has been your biggest
- 英语四级考试备考作文Protecting the Intangible Cultural Heritages训练题
- 口语训练教材:feast your eyes on; hit between the eyes
- 人脑和电脑The Brain and the Computer英语作文
- To Be Or Not To Be, That Is the Question英文读后感