知识大全 面试中常出现的两个Hibernate面试题及解答
Posted 数据库
篇首语:知识是珍贵的宝石,文化的宝石放出的光辉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 面试中常出现的两个Hibernate面试题及解答相关的知识,希望对你有一定的参考价值。
面试中常出现的两个Hibernate面试题及解答 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在数据库中条件查询速度很慢的时候 如何优化?
建索引
减少表之间的关联
优化sql 尽量让sql很快定位数据 不要让sql做全表查询 应该走索引 把数据量大的表排在前面
简化查询字段 没用的字段不要 已经对返回结果的控制 尽量返回少量数据
在hibernate中进行多表查询 每个表中各取几个字段 也就是说查询出来的结果集并没有一个实体类与之对应 如何解决这个问题?
解决方案一 按照Object[]数据取出数据 然后自己组bean
解决方案二 对每个表的bean写构造函数 比如表一要查出field field 两个字段 那么有一个构造函数就是Bean(type filed type field ) 然后在hql里面就可以直接生成这个bean了 具体怎么用请看相关文档 我说的不是很清楚
session load()和session get()的区别
Session load/get方法均可以根据指定的实体类和id从数据库读取记录 并返回与之对应的实体对象 其区别在于
如果未能发现符合条件的记录 get方法返回null 而load方法会抛出一个ObjectNotFoundException
Load方法可返回实体的代理类实例 而get方法永远直接返回实体类
load方法可以充分利用内部缓存和二级缓存中的现有数据 而get方法则仅仅在内部缓存中进行数据查找 如没有发现对应数据 将越过二级缓存 直接调用SQL完成数据读取
Session在加载实体对象时 将经过的过程
首先 Hibernate中维持了两级缓存 第一级缓存由Session实例维护 其中保持了Session当前所有关联实体的数据 也称为内部缓存 而第二级缓存则存在于
SessionFactory层次 由当前所有由本SessionFactory构造的Session实例共享 出于性能考虑 避免无谓的数据库访问 Session在调用数据库查询功能之前 会
先在缓存中进行查询 首先在第一级缓存中 通过实体类型和id进行查找 如果第一级缓存查找命中 且数据状态合法 则直接返回
之后 Session会在当前 NonExists 记录中进行查找 如果 NonExists 记录中存在同样的查询条件 则返回null NonExists 记录了当前Session实例在之前所有查询操作中 未能查询到有效数据的查询条件(相当于一个查询黑名单列表) 如此一来 如果 Session中一个无效的查询条件重复出现 即可迅速作出判断 从而获得最佳的性能表现
对于load方法而言 如果内部缓存中未发现有效数据 则查询第二级缓存 如果第二级缓存命中 则返回
如在缓存中未发现有效数据 则发起数据库查询操作(Select SQL) 如经过查询未发现对应记录 则将此次查询的信息在 NonExists 中加以记录 并返回null
根据映射配置和Select SQL得到的ResultSet 创建对应的数据对象
将其数据对象纳入当前Session实体管理容器(一级缓存)
执行Interceptor onLoad方法(如果有对应的Interceptor)
将数据对象纳入二级缓存
如果数据对象实现了LifeCycle接口 则调用数据对象的onLoad方法
返回数据对象
Hibernate的主键生成机制
) assigned
主键由外部程序负责生成 无需Hibernate参与
) hilo
通过hi/lo 算法实现的主键生成机制 需要额外的数据库表保存主键生成历史状态
) seqhilo
与hilo 类似 通过hi/lo 算法实现的主键生成机制 只是主键历史状态保存在Sequence中 适用于支持Sequence的数据库 如Oracle
) increment
主键按数值顺序递增 此方式的实现机制为在当前应用实例中维持一个变量 以保存著当前的最大值 之后每次需要生成主键的时候将此值加 作为主键 这种方式可能产生的问题是 如果当前有多个实例访问同一个数据库 那么由于各个实例各自维护主键状态 不同实例可能生成同样的主键 从而造成主键重复异常 因此 如果同一数据库有多个实例访问 此方式必须避免使用
) identity
采用数据库提供的主键生成机制 如DB SQL Server MySQL中的主键生成机制
) sequence
采用数据库提供的sequence 机制生成主键 如Oralce 中的Sequence
) native
由Hibernate根据底层数据库自行判断采用identity hilo sequence其中一种作为主键生成方式
) uuid hex
由Hibernate基于 位唯一值产生算法生成 进制数值(编码后以长度 的字符串表示)作为主键
) uuid string
与uuid hex 类似 只是生成的主键未进行编码(长度 ) 在某些数据库中可能出现问题(如PostgreSQL)
) foreign
使用外部表的字段作为主键 一般而言 利用uuid hex方式生成主键将提供最好的性能和数据库平台适应性
这 中生成OID标识符的方法 increment 比较常用 把标识符生成的权力交给Hibernate处理 但是当同时多个Hibernate应用操作同一个数据库 甚至同一张表的时候 就推荐使用identity 依赖底层数据库实现 但是数据库必须支持自动增长 当然针对不同的数据库选择不同的方法 如果你不能确定你使用的数据库具体支持什么的情况下 可以选择用native 让Hibernate来帮选择identity sequence 或hilo
另外由于常用的数据库 如Oracle DB SQLServer MySql 等 都提供了易用的主键生成机制(Auto Increase 字段或者Sequence) 我们可以在数据库提供的主键生成机制上 采用generator class=native的主键生成方式
cha138/Article/program/Java/ky/201404/30502相关参考
人事主管最常用的面试题和最喜欢的答案问题1如果我录用你,你认为你在这份工作上会待多久呢?A.这问题可能要等我工作一段时间后,才能比较具体地回答。B.一份工作至少要做3年、5年,才能学习到精华的部分。C
博惠思华Java开发工程师面试题及答案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!连接数据库使用
面试过程中,面试官会向应征者发问,而应征者的回答将成为面试官考虑是否接受他的重要依据。对应征者而言,了解这些问题背后的“猫腻”至关重要。对面试中经常出现的一些典型问题进行了整理,并给出相应的回答思路和
想找一份满意的工作吗?外企面试中面对外国老板连珠炮似的提问,有没有觉得心慌意乱、无所适从?求职过程中外企面试尤为重要,回答问题,如果能简明扼要,真诚中肯,合乎老外口味,那么录取机会必定大大增加。当然,
知识大全 Struts&Spring&Hibernate面试总结
Struts&Spring&Hibernate面试总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 有关ssh框架的面试题 — ibatis与hibernate有什么区别
iBatis的sql语句需要自己手动写而Hibernate能够在程序运行时自动生成但是不要就这样以为Hibernate比iBatis方便其实二者熟悉之后的效率差不多而Hibernate还能够自动建表等
以往工作中您的职责是什么?--如果描述不清,可见即使有相关工作经验,其系统性全面性也值得怀疑。 请讲一下您以往的工作经历。--考察
许多HR经理反映,女性在求职的过程中往往会犯这样或那样的错误,编辑搜集了八种典型范例,希望女性朋友们能以此为鉴。一、不相信自己是优秀的女人容易过高地要求自己,而很优秀的女人却有可能过低地评价自己。二、
面试中,面试官对你的录用也许只取决于你回答的几个问题而已,这就成为你进入一家公司的钥匙,为了给广大求职面试的人们一些帮助,我整理出最常用的面试题,希望大家可以借鉴这些解答思路,为您的求职之路铺平道路。
移动面试是在我从北京回来以后,面试移动的时候我比较消极,也没有好好准备,本来我面试前都会全面搜集这个公司的资料,我什么都没做就去面试了,后来结果证明这是很危险的!江苏移动算中国移动分公司中业绩比较好的