解析:此题目考查的是对Hibernate中交叉连接的理解。HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时。在where字句中,通过属性作为筛选条件,如统计报表数据。使用交叉连接时应避免“from Dept,Emp”这样的语句出现。执行这条HQL查询语句,返回DEPT表和EMP表的交叉组合,结果集的记录数为两个表的记录数之积,也就是数据库中的笛卡尔积。这样的查询结果没有实际意义,因此选项b是正确的。A和C答案都是符合上述描述的,是适合使用交叉连接的场合。D答案认为以上三种都适合,与上述描述冲突。由于题目要求选择不适合使用交叉连接的选项,因此选项B、C、D是错误的。
解析:Load方法会报出异常,而get不会报出异常
解析:本题考核的是Hibernate-HQL查询中的HQL概述。答案A中,HQL的select语句中的类名和属性名是区分大小写的;答案B中,HQL是支持统计函数的;答案D中,绑定参数的序号从0开始。所以ABD都不正确,只有C是正确的。因此答案是C。
解析:对二级缓存的理解更新频率低,常量数据,允许偶尔出现并发的数据适合故③④⑤适合放在二级缓存中
解析:
此题目考查的是对Hibernate主要从哪些方面优化查询性能的理解。A答案中分别指定了迫切左外连接、迫切内连接和查询缓存等方式,其中迫切左外连接和迫切内连接会将“左边”对象用于与“右边”对象关联的属性立即初始化,减少select语句的数目。同样地,查询缓存将一次查询的多条记录放入缓存,下次查询同样的一批记录时,不需要向数据库发起SQL语句,也可以减少select语句的数目。B答案中指定使用延迟加载策略来优化查询,延迟加载策略不立即加载与当前对象关联的对象,在第一次访问关联对象时才加载其信息,因此选项B也是Hibernate常用的性能优化措施之一。D答案中建议使用iterate方法,因为iterate方法可以将查询结果缓存在Session中,多次查询时,iterate首先查询ID字段,然后根据ID字段到Hibernate的Session缓存中查找匹配的持久化对象。如果存在,就直接把它加入到查询结果集中,否则就执行额外的select语句,根据ID字段到数据库中查询对象。C答案将性能优化的重点放在了数据库上,没有提到Hibernate中相关的措施。由于本题要求选择不是Hibernate中查询性能优化措施的选项,因此选项A、B、D是错误的,选项C是正确的。
解析:one-to-one配置的查询,必须查询到另一个实体
解析:经常被修改的数据需要一级缓存存储,而二级缓存存储查询的数据和常量数据。财务数据存储一些重要的数据,不只是需要简单的查询,需要修改,所以需要用一级缓存进行存储。
解析:hibernate的缓存原理
解析:本题考查的是batch-size的属性配置。batch-size主要控制的是SQL语句的生成,而不是查询结果的记录数,因此A选项不正确,batch-size的默认值为1,但不是越大越好,合理的取值范围为2-10因此选项CD不正确。
解析:本题考查的是Hibernate性能优化中缓存的使用。学员应注意二级缓存使用的要求。二级缓存使用时,经常被修改的数据不适用与放入二级缓存,因此A不正确;在多个应用之间共享的数据也不适合加入二级缓存,因为Hibernate不能自动保证在一个应用修改其中数据后缓存数据会与数据库保持一致,因此B不正确。
解析:因为如 A right join B 即取出B表的所有数据,由on条件关联的A表数据,有则显示,没有则为空;所以B错;
解析:本题考查的是HQL内连接与迫切内连接的区别。选项A的说法不正确,因为只有迫切内连接才会立即加载连接数据,普通内连接在初始化时set集合并不会立即加载数据。选项B的说法是正确的,emps集合不会被初始化。选项C的说法也是正确的,第二句是迫切内连接,所以数据会立即加载。选项D是误导选项。
解析:此题目考查的是Hibernate关系映射的使用。每个人有不同的名字这说明是一对一的关系人和人名不重复,多个人可以是同一个名字为对第一的关系。所以本题正确选项是AC。
解析:此题目考查的是Hibernate查询缓存适用的场合,对于经常使用的查询语句,如果启用了查询缓存,当第一次执行查询语句时,Hibernate会把查询结果存放在第二缓存中。以后再次执行该查询语句时,只需从缓存中获得查询结果,从而提高查询性能。所以本题正确选项是AB。
解析:此题目考查的是Hibernate二级缓存相关内容。Hibernate的二级缓存策略,是针对于ID查询的缓存策略,经常被查询的数据,在没有条件时是可以用二级缓存的,因此答案应是D。
解析:此题目考查的是Hibernate二级缓存配置。首先要加载ehcache.xml,然后在配置文件中配置开启二级缓存信息,之后还有在配置文件上配置缓存产品提供商的信息,最后在修改持久化类的映射文件,因此答案应是B。
解析:C二级缓存和查询缓存需要在开启二级缓存才可以进行交互
解析:
A一级缓存和二级缓存能进行交互,需要配置 关闭二级缓存 B 没有此配法 C 可以在相应的映射进行配置 D 正确
解析:题目考查的是Hibernate持久化层的缓存的并发访问策略,只读型:对于从来不会被修改的数据,所以本题正确选项是D。
解析:执行from Dept d inner join d.emps返回的集合中,每个元素是一个Object[ ];执行from Dept d inner join fetch d.emps返回的集合中,每个元素是一个Dept对象。执行from Dept d inner join d.emps所得到的Dept对象中的emps属性是未初始化,即没有存储关联的Emp对象;执行from Dept d inner join fetch d.emps所得到的Dept对象中的emps属性才是初始化好的。
解析:此题目考查的是对缓存的理解,查询少,变更多时,使用缓存反而会降低性能,所以a、b错误。如果按照id查询,可在id列上增加索引,但如果对每一列都增加索引可能会降低插入和修改性能,因此d错误。应选择C
解析:此题目考查的是hibernate中如何配置一对一关系,user应该持有card属性,因此a和c错误,一对一映射不需要用property标签,d错误,应选择b
总结:hibernate使我快乐!!!