面试问的最多的hibernate面试题

什么是hibernate

hibernate是一种轻量级的ORM的实现,是对JDBC的一种封装。ORM是意思是 对象与关系数据库之间的映射 Object Relation Database Mapping.

POJO是什么

POJO的全称是plain old java object 相当于Java Bean,又叫做实体类 entity bean

hibernate 开发流程

一个完整的hibernate 开发流程包含如下这些步骤
1. 配置Hibernate.cfg.xml
里面包含数据库连接信息,哪些HBM,是否使用2级缓存,是否显示SQL,方言等等
2. 配置 hbm 文件
大概是哪个类对应哪张表,属性对应什么字段,各种关系映射,比如ONE-MANY,MANY-ONE,MANY-MANY
3.使用HIBNERATE
通过Configuration拿到SessionFactory, 接着拿到Session,然后进行一系列数据库相关的业务操作

one-many怎么配置

以Category和Product的一对多为举例
1. Category中要有一个set的products
2. 在Category.hbm.xml中要有一对多映射

<set name="products" lazy="false">
		<key column="cid" not-null="false" />
		<one-to-many class="Product" />
</set>

many-one怎么配置

以Product和Category为例
1. Product中要有一个category属性
2. 在Product.hbm.xml中 进行many-to-one配置

<many-to-one name="category" class="Category" column="cid" />

many-many 怎么配置

以User和Product为例子
1. User中有products属性
2. Product中有users属性
3. 使用如下进行配置

<set name="products" table="user_product" lazy="false">
    <key column="uid" />
    <many-to-many column="pid" class="Product" />
</set>  

get与load的区别

通过id获取Product对象有两种方式,分别是get和load
他们的区别分别在于
1. 延迟加载
2. 对于id不存在的时候的处理

常见查询3种方式

HQL,Criteria和标准SQL

三种状态

体类对象在Hibernate中有3种状态,分别是瞬时,持久和脱管
瞬时 指的是没有和hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,这个对象也就消失了
持久 指得是一个对象和hibernate发生联系,有对应的session,并且在数据库中有对应的一条记录
脱管 指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的session已经关闭了

openSession与getCurrentSession的区别

hibernate 有两种方式获得session,分别是:OpenSession和getCurrentSession
他们的区别在于
1. 获取的是否是同一个session对象
OpenSession每次都会得到一个新的Session对象
getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象
2. 事务提交的必要性
openSession只有在增加,删除,修改的时候需要事务,查询时不需要的
getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后,session就自动关闭,不能够再进行关闭

一级缓存

hibernate默认是开启一级缓存的,一级缓存存放在session上

二级缓存如何配置

hibernate的一级缓存是在Session上,二级缓存是在SessionFactory上
配置方式:要在hibernate.cfg.xml中开启

<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值