hibernate面试题汇总

上传人:hs****ma 文档编号:560274032 上传时间:2023-09-26 格式:DOCX 页数:5 大小:24.15KB
返回 下载 相关 举报
hibernate面试题汇总_第1页
第1页 / 共5页
hibernate面试题汇总_第2页
第2页 / 共5页
hibernate面试题汇总_第3页
第3页 / 共5页
hibernate面试题汇总_第4页
第4页 / 共5页
hibernate面试题汇总_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《hibernate面试题汇总》由会员分享,可在线阅读,更多相关《hibernate面试题汇总(5页珍藏版)》请在金锄头文库上搜索。

1、hibernate面试题汇总Native主键生成方式会根据不同的底层数据库自动选择Identity、Sequence、Hilo主键生成方式特点:根据不同的底层数据库采用不同的主键生成方式。由于Hibernate会根据底层数据库采用不同的映射方式,因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式。Identity根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式。特点:与底层数据库有关,要求数据库支持Identity,如MySQl中是auto_increment,SQLServer中是Identity,支持的数据库有MySql、SQLServer、DB2、Sybase

2、和HypersonicSQL。Identity无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。SessionFactory是一个大型对象,而且线程安全。在一个程序中只需要一个数据库方言:多种数据库拥有不同的语言语法,通过设置dialect指定所用的数据库,并生成对应语法和语言的sql语句。暂态:数据库中没数据。跟session不相关。没存过。游离态:在数据库中有记录,但是在session中没有。需要手工同步。持久态:数据库中有记录,session中也有这记录。自动更新load在加载的时候会根据加载策略来加载东西,加载策略默认为延迟加载,即只加载id.,如果

3、需要用其它数据,必须在session关闭之前,去加载某一个属性。lazy=trueorfalse如果加载策略是立即加载,那么它在加载时会把数据信息全部加载,这个时候即使,关闭session,因为数据已经全部加载了,也能取得数据get会直接采用立即加载策略加载数据,不管你配置的是延迟加载还是立即加载关于立即加载和延迟加载不仅只对自己这张表,将来表与表之间有关系时,一样会起作用。如果对象不存在get返回nullload抛异常:在执行时进行关联操作。all-orphan:当一个节点在对象图中成为孤儿节点时,删除该节点。比如在一个一对多的关系中,Student包含多个book,当在对象关系中删除一个b

4、ook时,此book即成为孤儿节点。inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse=true表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。Hibernate在检索与Customer关联的Order对象时,使用了默认的立即检索策略。这种检索策略存在两大不足:(1) select语句的数目太多

5、,需要频繁的访问数据库,会影响检索性能。如果需要查询n个Customer对象,那么必须执行n+1次select查询语句。这就是经典的n+1次select查询问题。(2) 在应用逻辑只需要访问Customer对象,而不需要访问Order对象的场合,加载Order对象完全是多余的操作,这些多余的Order对象白白浪费了许多内存空间。为了解决以上问题,Hibernate提供了其他两种检索策略:延迟检索策略和迫切左外连接检索策略。延迟检索策略能避免多余加载应用程序不需要访问的关联对象,迫切左外连接检索策略则充分利用了SQL的外连接查询功能,能够减少select语句的数目。直接使用hibernateAP

6、I进行批量更新和批量删除都不推荐,而直接通过JDBCAPI执行相关的SQl语句或调用相关的存储过程是最佳的方式。session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;级别的缓存,需要手动配置;所有的session可以共享sessionFactory级别的缓存;(一般把一些不经常变化的实体对象放到sessionFactory级别的缓存中,适合放不经常变化的实体对象。)二级缓存的配置和使用方法如下:必须把包导入,然后到的etc文件下把复制到工程src目录下(里边的

7、参数里边有详细英文说明);说明:是第三方法的缓存产品,hiberante只是把它做了集成,还有好多第三方hibernate集成的缓存产品,相关说明请查阅hiberante3开发手册;ehcache是不支持分布应用的,如果有分布式需求,请换成支持分布式的二级缓存产品,hiberate3开发手册都有相头说明。配置方法都类似);的二级缓存默认是开起的,也可以指定开起。list不会使用缓存,而iterate会先取数据库selectid出来,然后一个id一个id的load,如果在缓存里面有,就从缓存取,没有的话就去数据库load。不管是list方法还是iterate方法,第一次查询的时候,它们的查询方式很它们平时的方式是一样的,list执行一条sql,iterate执行1+N条,多由来的行为是它们填充了缓存查询缓存需要打开相关类的class缓存。list和iterate方法第一次执行的时候,都是既填充查询缓存又填充class缓存的。这里还有一个很容易被忽视的重要问题,即打开查询缓存以后,即使是list方法也可能遇到1+N的问题!

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

当前位置:首页 > 商业/管理/HR > 营销创新

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