面试题首页 > Hibernate面试题

Hibernate常见面试题

001什么是 ORM 框架?

ORM是Object Relation Mapping的缩写,意思是对象关系映射,是把数据库中的关系数据映射成为程序中的对象。使用 ORM 的优点:提高了开发效率降低了开发成本、开发更简单更对象化、可移植更强。

002简单介绍下Hibernate。

Hibernate是持久层框架,通过对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

003Hibernate的优点?

1)对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2)Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3)Hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4)Hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

004Hibernate工作原理?

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的读取并解析映射信息
3.通过config.buildSessionFactory();//创建SessionFactory
4.sessionFactory.openSession();//打开Sesssion
5.session.beginTransaction();//创建事务Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事务
8.关闭Session
9.关闭SesstionFactory

005Hibernate 对象有哪些状态?

临时/瞬时状态:直接 new 出来的对象,该对象还没被持久化(没保存在数据库中),不受 Session 管理。
持久化状态:当调用 Session 的 save/saveOrupdate/get/load/list 等方法的时候,对象就是持久化状态。
游离状态:Session 关闭之后对象就是游离状态。

006Hibernate中get和load区别?

数据查询时,没有 OID 指定的对象,get() 返回 null;load() 返回一个代理对象。
load()支持延迟加载;get() 不支持延迟加载。

007在Hibernate 中getCurrentSession 和 openSession 的区别是什么?

getCurrentSession 会绑定当前线程,而 openSession 则不会。
getCurrentSession 事务是 Spring 控制的,并且不需要手动关闭,而 openSession 需要我们自己手动开启和提交事务。

008如何在控制台看到Hibernate生成并执行的sql?

在定义数据库和数据库属性的文件applicationConfig.xml里面,把hibernate.show_sql 设置为true,这样生成的SQL就会在控制台出现了。注意:这样做会加重系统的负担,不利于性能调优。

009Hibernate中save、persist和saveOrUpdate这三个方法的不同之处?

都是用于将对象保存到数据库中的方法。
1)save()只能执行INSERT操作,会立即执行Sql insert,save()的返回值是一个Serializable对象;
2)saveOrUpdate()可以进行 记录的INSERT和UPDATE;
3)persist不保证立即执行,可能要等到flush;persist不更新缓存;persist()方法返回值为void;

目录

返回顶部