Hibernate面试总结

复习总结

day04-----------------Hibernate

1、Hibernate的优势

1. 对jdbc做了封装,大大简化了数据访问层繁琐的重复性代码
2. 一个优秀的ORM框架
3. 使用了反射机制
4. 性能好,支持很多关系型数据库

2、工作原理

1. 读取并解析核心配置文件hibernate.cfg.xml
2. 读取并解析映射文件,创建SessionFactory
3. 打开Session
4. 创建事务Transation
5. 持久化操作
6. 提交事务
7. 关闭Session
8. 关闭SessionFactory

3、Hibernate如何实现延迟加载(懒加载)

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当真正需要数据的时候,才真正执行数据加载操作。

1. 在Hibernate中,提供了对实体对象的延迟加载,对集合的延迟加载和对属性的延迟加载。
2. 在Hibernate查询数据的时候,数据并没有存储在内存中,当程序真正对数据进行操作时,持久化对象才存在内存中。

4、Hibernate中怎样实现类之间的关系?(一对多,多对多)

many-to-one、one-to-many、many-to-many

5、Hibernate对象的生命周期以及三种状态

5.1 临时状态

1. 不处于session缓存中
2. 数据库中没有对象记录

如何进入临时状态:
1. new 语句创建对象
2. 调用session.delete(),从session缓存中删除一个对象时

5.2 持久化状态

1. 处于session缓存中
2. 持久化对象数据库中有对象记录
3. 自动关联、自动更新,保持同步

如何进入持久化状态
1. session的save()   临时--->持久
2. session的load()
3. session的find()
4. session的update()/saveOrUpdate()  游离--->持久

5.3 游离状态

1. 不处于session缓存中
2. 游离对象由持久化状态转变而来,数据库中可能还有对应记录

如何从持久化状态--->游离状态
1. session的close()
2. session的evict()

6、在Hibernate实体类中必须包含一个无参构造器,为什么?

1. Hibernate框架中使用的是反射API,通过class.newInstance()来创建这些实体类的实例。
2. 如果在实体类中找不到无参构造器,这个方法就会抛出一个实例化异常。

7、Hibernate中Session.get()和load()方法的比较

1. get()方法直接返回实体类,如果查不到数据就返回null,
2. load()方法会返回一个实体代理对象(当前这个对象可以自动转换为实体对象),但当这个代理对象被调用时,如果数据不存在就会抛出ObjectNotFoundException
3. get()方法现在缓存中去查,如果没有就到数据库中去查(即贸马上发出sql)
4. load()方法先到缓存中去查,如果没有就返回一个代理对象,等后面使用这个代理对象时猜到数据库中查询,这就是我们常说的load()在默认情况下支持延迟加载

总之:如果你确定数据库中有这个对象,就用load(),不确定就用get()

8、Hibernate中save、update、saveOrUpdate的区别

1. save():适合确定要插入的数据,且需要得到插入数据的主键,它不能保存一个持久态或更新一个游离态数据。
2. update():操作的对象时持久化的,如果数据库中不存在就不能使用此方法。
3. saveOrUpdate():操作的对象无约束,如实若是持久化对象,调用此方法就是更新操作,反之,则进行save()操作,该方法倾向于不确定数据,且不需要得到它的主键。

9、HttpSession和Hibernate中Session的区别

1. HttpSession是一个接口,存放一些经常被用的信息,例如用户名等。
2. Hibernate中的session用来操作数据库的一个对象。

10、Hibernate查询方式有几种

1. 本地SQL
2. hql查询

11、Hibernate的缓存机制

Hibernate面试总结
Hibernate面试总结
Hibernate面试总结

1. 一级缓存又叫内部缓存
2. 二级缓存:
	1. 应用级缓存
	2. 分布式缓存
    3. 第三方缓存

12、什么是Hibernate的并发机制,怎么去处理并发问题?

1. Hibernate的Session对象时非线程安全的,对于单个请求,单个的工作单元,它通常只是用一次,然后就丢弃。
2. 多个事务并发访问同一个资源,可能会引起更新丢失、脏读、不可重复读、幻读等一系列问题。
3. 解决方案:设置隔离级别、设置锁

13、SQL和HQL的区别

Hibernate面试总结

14、Hibernate的核心API

14.1 Configuration

用于加载hibernate配置

14.2 SessionFactory

保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句这个对象是线程安全的

14.3 Session

1. 代表hibernate操作会话对象
2. session是一个单线程对象,线程不安全

14.4 Transaction

事务操作:commit 提交,rollback 回滚

14.5 Query

执行数据库的查询