Hibernate面试精华:常见问题与解答

4星 · 超过85%的资源 需积分: 9 6 下载量 69 浏览量 更新于2024-09-15 收藏 57KB DOC 举报
本文档是一份针对Hibernate面试的精选题库,涵盖了关系数据模型与对象模型的映射、SessionFactory的使用、映射文件的配置、级联操作、Session的方法以及常见编程操作的分析。以下是对这些知识点的详细解释: 1. 关系数据模型与对象模型的匹配关系: - A) 表对应类:在Hibernate中,每个数据库表通常映射到一个Java类,这是最常见的映射方式。 - B) 记录对应对象:一条数据库记录对应一个Java对象实例,对象的状态反映了数据库中的数据。 - C) 表的字段对应类的属性:类的属性(字段)对应数据库表的列,属性的类型决定如何存储和检索数据。 - D) 表之间的参考关系对应类之间的依赖关系:通过外键关联的两个表,其Java类之间存在引用或依赖关系。 2. sessionFactory的相关知识点: - A) 对于每个数据库事务,建议使用单例模式来管理SessionFactory,而不是每次事务创建一个新的对象。 - B) 一个SessionFactory通常对应一个数据库连接池,而非单个存储源。 - C) sessionFactory是重量级对象,频繁创建可能导致性能问题,所以应适当管理和复用。 - D) load()方法用于根据主键从数据库中加载已持久化的对象,但不是唯一的持久化操作方法。 3. Customer类中的Set<Orders>映射: - 在hibernate.cfg.xml或Customer.hbm.xml中,可能需要使用`<set>`元素来映射,但具体选项缺失,可能对应的是`<set name="orders" cascade="save-update">`,其中`cascade="save-update"`表示在保存Customer时同时保存其Orders集合。 4. cascade属性选择: - 如果希望在保存Customer时自动保存其Orders集合,`cascade`属性应该设置为`save-update`,表示在更新时保存关联对象。 5. Session的方法: - A) load():根据主键加载对象。 - B) save():保存新对象或更新已有对象。 - C) delete():删除指定对象。 - D) update():更新对象的状态。 - E) open():打开Session,可能不常用,因为通常在SessionFactory中初始化Session。 - F) close():关闭当前Session。 6. 编程操作分析: - 由于没有给出完整代码,但从提供的部分判断,1-4行是事务处理和对象加载。5行提交事务,6行关闭Session。 - 当使用load()两次加载同一个对象时,第二次会从缓存获取,而不是再次查询数据库。因此,`c1==c2`将打印true,因为它们指向的是同一个对象实例。 7. 修改Customer的name属性: - 代码7-10展示了事务内对Customer对象的读取和修改。如果只执行了setName("newName"),没有保存,name的改变不会持久化到数据库。 面试者可能会考察应聘者对Hibernate基础概念的理解,如映射、事务管理、对象关系映射、级联操作和Session的使用等。在准备此类面试时,深入了解这些知识点并能灵活应用至关重要。