知识大全 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/201311/27920相关参考
链表的常见操作链表是数据结构的重要内容在计算机程序中应用广泛同时也是各公司笔试题目的重点 以下简单实现了链表的一些操作包括创建增加节点删除节点单链表逆置合并有序链表等一链表创建 链表主要有三种形式
知识大全 我和男友两年异地恋,现在感觉感情淡了,我们放假也不常见面,家长不知道,我们能长久吗
我和男友两年异地恋,现在感觉感情淡了,我们放假也不常见面,家长不知道,我们能长久吗嗯,这是很正常的事,异地恋的男女谈的时间长了都有感觉淡了的感觉,这是因为人都有新鲜感,刚开始对对方有新鲜感很想接近对方
结婚之前,让父母见面是常有的事儿。那么双方父母见面是订婚吗,要谁提,何时见面合适,聊什么呢?这里有你要的答案。
名企招聘考试题汇总:Google公司面试 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Google
我要一些常用到的日语(要音译)句子:初め(はじめ)ましてどうぞよろしく解释:初次见面,请多关照读法:hajimemaxitedozoyoloxiku注解:也可以只说前半句里的初め(はじめ)まして句子:
科目汇总表核算形式与汇总记账凭证核算形式的含义、特点及其异同?
科目汇总表核算形式又称记账凭证汇总表核算形式。其主要特点是定期将记账凭证按会计科目汇总,然后再根据科目汇总表登记总分类账的一种会计核算形式。定期编制科目汇总表,并以此为依据登记总分类账,是其主要特点。
EXCEL的分类汇总里面的多重分类汇总怎么实现。 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!EX
结婚见面礼是什么意思?结婚见面礼其实是双向的,可以指女方去男方家,男方所要送给女方的礼物,也可以指男方去女方家,所要带给女方的礼物。见面礼的通俗之意:见面礼指初次见面时馈送的礼品或指见面时的礼节。小辈
汇总记账凭证核算形式的特点是:先定期将全部记账凭证汇总编制成各种汇总记账凭证,再根据汇总记账凭证登记;总分类账. 汇总记账凭证核算形式的优点是:可以简化总账的登记工作;在汇总记账凭证和总账中可以反映
科目汇总表账务处理程序是定期将所有记账凭证汇总编制成科目汇总表,再根据科目汇总表等级总分类帐的账务处理程序。 其特点是:根据记账凭证汇总编制科目汇总表,根据科目汇总表等级总分类帐。 这一特点决定了