其他分享
首页 > 其他分享> > Hibernate面试题

Hibernate面试题

作者:互联网

1.什么是Hibernate

hibernate是一种轻量级的orm的实现,是对jdbc的一种封装;

Orm是对象关系映射(Object Relational Mapping)的缩写。

2.什么是POJO

POJO(Plain Ordinary Java Object)是简单地Java对象,是普通的JavaBeans。

3.Hibernate开发流程

1.配置hibernate.cfg.xml,里面包含数据库连接信息,哪些HBM,是否显示二级缓存、SQL语句、方言等;

2.配置HBM档,大概是哪个类对应哪张表、属性对应什么字段、各种关系映射;

3.使用hibernate,通过Configuration拿到SessionFactory,接着拿到Session,然后进行一系列数据库相关的业务操作。

4.get与load的区别

通过ID获取对象方式有两种:分别是get和load,他们的区别在于

  1. 延迟加载
  2. 对于ID不存在的时候的处理

5. 常见三种查询方式

分别是HQL、 Criteria、标准SQL

6. 三种状态

实体类对象在hibernate中有三种状态

分别是瞬时、持久、脱管;

瞬时——指的是没有和hibernate发生任何关系 ,在数据中也没有对应的记录,一旦JVM结束这个对象也就消失;

持久——指的是一个对象和hibernate发生联系,有对应的Session并且数据库中有对应的一条记录;

脱管——指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的Session已经关闭了。

代码演示参考:Hibernate对象的三种状态

7. OpenSession与GetCurrentSession的区别

Hibernate有两种方式获得Session分别是:

OpenSession和getCurrentSession

它们区别在于

  1. 获取的是否是同一个session对象

OpenSession每次都会得到一个新的session对象,getCurrentSession在同一个线程中,每次都是获取相同的session对象,但是在不同的线程中获取的是不同的Session对象;

  1. 事务提交的必要性

OpenSession只有在增加、删除、修改的时候需要事务,查询时不需要,getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后Session就自动关闭。

代码演示参考 OpenSession与GetCurrentSession的区别

8. 一级缓存

Hibernate默认开启是一级缓存的,一级缓存存放在Session上

代码演示参考 Hibernate一级缓存

9. 二级缓存如何配置

Hibernate的一级缓存是在Session上,二级缓存是在SessionFactory上

配置方式:

要在hibernate.cfg.xml中开启

代码演示参考 Hibernate二级缓存

标签:面试题,Hibernate,OpenSession,对象,缓存,hibernate,Session
来源: https://www.cnblogs.com/shiyuebuhei/p/11575449.html