Java面试必备:Hibernate、持久化对象状态与ORM解析

需积分: 10 4 下载量 141 浏览量 更新于2024-07-26 5 收藏 362KB DOC 举报
"这是一份Java面试题集合,涵盖了常见的面试知识点,包括Hibernate的检索方式、对象的状态管理、ORM的挑战及解决方案以及继承关系的映射策略等。" 在这份葵花宝典般的Java面试题集中,我们可以看到一些关键的面试知识点,这对于准备Java开发者面试或者想要深入理解Java技术栈的人来说非常有价值。 首先,关于Hibernate的检索方式,它是Java中一种流行的ORM(Object-Relational Mapping)框架。题目中提到了五种检索方式: 1. 导航对象图检索:通过对象之间的关联关系直接获取关联对象。 2. OID检索:基于对象标识符(Object Identifier)进行查询。 3. HQL检索:Hibernate Query Language,类似于SQL,用于查询对象。 4. QBC检索:Query By Criteria,基于标准的Java Criteria API进行查询。 5. 本地SQL检索:直接使用原生的SQL语句进行查询。 其次,Forward与Global-Forward是Struts框架中的概念。Forward是Action返回的结果,用于转向页面或资源;Global-Forward则是在struts-config.xml全局配置中定义的转发,适用于多个Action共享同一转发路径的情况。 接着,持久化对象的三种状态是理解Hibernate工作原理的关键: 1. 临时状态:新创建的对象,尚未与Session绑定,不具备持久化能力。 2. 持久化状态:对象已存在于Session缓存中,与数据库中的记录相对应。 3. 游离态:曾经是持久化的对象,但Session已经关闭,对象与数据库的联系断开。 面试题中还涉及了三种检索策略: 1. 立即检索:对象在需要时自动加载,可能导致大量SELECT语句,适用于对透明性要求高的场景。 2. 延迟检索:仅在需要时加载关联对象,减少不必要的数据读取,适用于一对多或多对多关联。 3. 迫切左外连接检索:一次性加载关联对象,减少数据库交互,适用于一对一或多对一关联,且数据库性能允许的情况下。 此外,ORM解决的主要问题是对象模型和关系模型之间的不匹配,例如: 1. 面向对象的继承在关系数据库中难以直接表达,需要特殊处理。 2. 多对多关联在关系模型中通常通过中间表实现。 3. 双向关联在关系模型中只能单向体现,需要额外的设计来模拟双向性。 4. 面向对象的模型通常更细粒度,而关系模型倾向于更粗粒度的表结构。 最后,映射继承关系的三种方式: 1. 每个子类对应一张表,包含自身属性和继承自父类的属性。 2. 所有子类共用一张表,通过类型字段区分不同子类,适合少量子类的情况。 3. 统一表继承,所有子类属性都存储在一张表中,适用于复杂的继承层次。 这些知识点都是Java开发者必备的基础,对于准备面试或是提升技术深度都至关重要。通过深入理解和掌握这些内容,可以更好地应对面试和日常开发工作。