`
kidiaoer
  • 浏览: 822700 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

hibernate面试资料总结

阅读更多

hibernate面试资料总结
为什么使用hibernate 
1、对JDBC操作提供封装,方便操作简化数据库访问的代码(connection,eparedStatement,resultSet); 
2、简化DAO层的代码量ORM从关系型DB到面向对象(java)的转变 
3、在java代码中充斥着大量的sql语句不便于维护,但是ORM映射可以减少此类代码,便于维护 

session.load和session.get的区别 
两者都是用缓存,load查询数据如果没有会出现Exception ,get会出现null 
load支持lazy , get不支持lazy 
load 查询 先查一级缓存,如果没有数据则会生成ciglib,在实际使用的时候(也就是lazy=true)查询二级缓存,还没有数据查询数据库,在没有就会出现异常,主意这里是Exception 
get 先查询一级缓存,在查询二级缓存最后查询数据库如果没有数据则出现null 

hibernate中lazy的有效期是在session打开状态下 
<class>上的lazy特性会影响普通属性 

一级缓存是session级别的二级缓存是sessionFactory级别的 
session使用evict和clear来管理缓存,不同的session不能共享数据但是可以共享sessionFactory 
session和sessionFactory中存储的形式类似于Map 的键值对 
key为实体对象的ID value 为实体对象 

get load iterator 使用一级缓存 save方法支持缓存 

list和iterate的区别? 
* list每次都会发出查询语句,list向缓存中放入数据,但不利用缓存中的数据 
* iterate在默认情况下利用缓存中的数据,只有在缓存中根据id无法找到相应 

list不使用一级缓存 只会向 缓存中插入数据 所以list 每次都会发出sql语句 

iterator N+1 问题 
iterator查询实体对象会发出查询 ID 列表的sql语句如果一级二级缓存有数据则不发出查询实体的sql语句,如果没有则直接查询DB 
list N+1 问题 
实用查询缓存 
查询实体对象 
二级缓存不存在或是过期或者是evict 

关于查询缓存: 
hibernate查询缓存 

查询缓存是针对普通属性结果集的缓存 
对实体对象的结果集会缓存id 

查询缓存的生命周期,当关联的表发生修改,那么查询缓存的生命周期结束 

查询缓存的配置和使用: 
* 启用查询缓存,修改hibernate.cfg.xml文件 
<property name="hibernate.cache.use_query_cache">true</property> 
* 在程序中必须启用,如: 
       query.setCacheable(true); 

---------------------------------------------- 

* 开启查询缓存,关闭二级缓存 
开启一个session,分别调用两次query.list()查询普通属性 
每次调用list 都要设置 query.setCacheable(true); 

只发出一条sql语句; 

* 开启查询缓存,关闭二级缓存 
开启两个session,分别调用query.list()查询普通属性 

第二次query.list()不会发出查询sql,因为查询缓存的生命周期和session无关 

* 开启查询缓存,关闭二级缓存 
开启两个session,分别调用query.iterate()查询普通属性 

查询缓存只对query.list起作用,query.iterate不起作用,其实query.iterate不使用查询缓存 

* 关闭查询缓存,关闭二级缓存 
开启两个session,分别调用query.list()查询实体对象 

发出查询sql,因为query.list默认情况下,每次都会发出查询sql 

* 打开查询缓存,关闭二级缓存 
开启两个session,分别调用query.list()查询实体对象 

会发出n条查询语句,因为开启了查询缓存,关闭了二级缓存,而且是跨session查询 
查询缓存会缓存实体对象的id,所以hibernate会根据实体对象的id加载相应的实体 
如果缓存中存在则加载缓存中的数据,否则根据id发出相应的查询语句 

* 打开查询缓存,开启二级缓存 
开启两个session,分别调用query.list()查询实体对象 

不会发出查询sql,因为开启了二级缓存和查询缓存,查询缓存缓存了实体对象的id列表 
hibernate会根据实体对象的id到二级缓存中取得相应的数据 




Transient状态的对象的特性? 
* 在数据库中没有与之匹配的记录 
* 没有纳入session的管理 

persistent状态的对象的特性? 
* 纳入session的管理 
* persistent状态的对象在数据库中存在与之匹配的数据 
* persistent状态的对象在清理缓存(脏数据检查),会和数据库同步 

detached状态的对象的特性? 
* 在数据库中存在与之对应的记录 
* 没有纳入session的管理 

session.flush方法主要做两件事: 
* 清理缓存 
* 执行sql 

session在什么情况下执行flush 
* 默认在事务提交时 
* 显示调用flush 
* 在执行查询前,如:iterate 

分享到:
评论

相关推荐

    hibernate面试题总结

    Hibernate是Java领域中一款流行的持久...以上就是Hibernate面试中常见的问题和答案,涵盖了基本概念、缓存策略、查询方式以及事务和数据访问等方面的知识点。理解并掌握这些内容对于深入学习和使用Hibernate至关重要。

    Hibernate大总结/Hibernate面试题大全

    以上总结了Hibernate的一些核心概念和面试中可能遇到的关键知识点。了解这些概念有助于更好地掌握Hibernate框架的使用,以及如何高效地利用Hibernate进行数据库操作。此外,对于面试者而言,熟悉这些概念也能帮助...

    Hibernate面试总结2013

    最新的Hibernate面试总结,Java程序员面试需要准备的东西!

    常见hibernate面试题.doc

    ### 常见Hibernate面试题知识点详解 #### 1. Hibernate查询数据的方式 - **导航对象图查询**:这是最基本的查询方式之一,适用于查询对象之间的关联关系。通过已知对象来导航到其他对象,比如通过一个`User`对象...

    SSH(struts+spring+hibernate)面试题总结

    SSH,即Struts、Spring和Hibernate,是Java开发中常用的一种技术栈,主要用于构建企业级应用。这三种框架分别在MVC模式中的表现层、业务层和服务层起到关键作用。以下是对SSH面试题中涉及的一些核心知识点的详细解释...

    Struts_Spring_Hibernate面试题总结

    这篇面试题总结主要涉及Servlet的基础知识,包括其生命周期、工作原理以及与Struts、Spring、Hibernate的关系。 1. Servlet生命周期: - 初始化阶段:Servlet容器在接收到web应用部署描述符(web.xml)中的`...

    Hibernate常见面试题

    这些知识点涵盖了常见的面试问题,可以帮助准备面试或深入理解Hibernate技术的人士更好地掌握该领域的内容。 ### Hibernate的检索方式 1. **导航对象图检索**:通过已加载的对象来访问与其关联的对象,这种检索...

    2022年StrutsSpringHibernate面试题总结.docx

    【Struts工作原理】 Struts是一个开源的MVC框架,它的主要作用...Spring作为IoC/DI容器,可以管理和注入Struts的Action以及Hibernate的SessionFactory,提供事务管理、AOP等功能,进一步提升了应用的灵活性和可测试性。

    hibernate 面试 总结

    本人工作7年总结的一些hibernate面试大纲,一般都会包括在里面,适合1到5年工作经验的人。

    Struts,Spring,Hibernate面试总结

    Struts、Spring和Hibernate是Java开发中的三大框架,它们各自承担着不同的职责,共同构建了企业级应用的基础架构。在面试中,对于这三个框架的掌握程度往往被视为衡量开发者技能水平的重要标准。 Struts是一个基于...

    struts sping hibernate 面试总结

    Struts、Spring和Hibernate是Java开发中常用的三大框架,它们分别负责不同的职责。Struts作为MVC模式的实现,主要用于处理Web应用中的视图和控制逻辑;Spring则是一个全面的后端框架,提供了依赖注入、AOP(面向切面...

    hibernate面试题

    ### Hibernate面试题详解 #### 1. Hibernate中的关系类型 题目描述了一种关系选择题,但实际给出的信息并不清晰。不过,根据选项推测,此题意在考察Hibernate中实体间的关系类型。 - **一对一 (One-to-One)** - *...

    struts spring hibernate 面试总结.doc

    Struts、Spring 和 Hibernate 是三个非常重要的 Java Web 开发框架,它们在面试中经常被问及。下面将分别介绍这三个框架的工作原理以及使用它们的原因。 Struts 是一个基于 Model-View-Controller(MVC)设计模式的...

    spring +hibernate+struts面试总结

    spring +hibernate+struts面试总结

    hibernate部分面试题,自己总结的哦。

    hibernate部分面试题,自己总结的哦。有些是应付考试用的,有的是工作需要,有的是工作和面试都需要的,所以要分清楚后掌握。以及掌握的程度。

    Struts+Hibernate+Spring面试总结

    Struts、Hibernate 和 Spring 是Java开发中常用的三大框架,它们分别负责不同的职责:Struts作为MVC模式的实现,主要用于处理Web应用的控制逻辑;...在面试中,理解并能详细解释这些概念和技术是至关重要的。

    最新Struts和Hibernate和Spring经典面试题

    以下是对 Struts、Hibernate 和 Spring 的经典面试题的总结,涵盖了这些框架的工作机制、优点、缓存机制、查询方式、优化方法等知识点。 Hibernate 1. Hibernate 工作原理及为什么要用? Hibernate 工作原理包括...

    Hibernate 经典总结

    【Hibernate 概述】 Hibernate 是一个流行的 ...面试时,除了了解 Hibernate 的基本概念和特点,面试官更希望听到你在实际项目中如何运用 Hibernate,以及遇到的问题和解决方案,体现出你的实践经验和问题解决能力。

Global site tag (gtag.js) - Google Analytics