java面试题-hibernate面试题(助力2020面试成功)

java面试题-hibernate面试题(助力2020面试成功)

原创

服务器上云 ©著作权

文章标签 Java教程 Java面试题 文章分类 Java 后端开发

©著作权归作者所有:来自51CTO博客作者服务器上云的原创作品,请联系作者获取转载授权,否则将追究法律责任

步骤3:HIBERNATE 开发流程
步骤4:one-many怎么配置
步骤5:many-one怎么配置
步骤6:many-many 怎么配置
步骤7:get与load的区别
步骤8:常见查询3种方式
步骤9:三种状态
步骤10:openSession与getCurrentSession的区别
步骤11:1级缓存
步骤12:2级缓存如何配置

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

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

一个完整的hibernate 开发流程包含如下这些步骤

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

以Category和Product的一对多为举例

  1. Category中要有一个set的products
  2. 在Category.hbm.xml中要有一对多映射
    详细参考Hibernate 实现一对多
    |示例 5 : many-one怎么配置|
    |-------------------|–|

还是以Product和Category为例

  1. Product中要有一个category属性
  2. 在Product.hbm.xml中 进行many-to-one配置
<many-to-one name="category" class="Category" column="cid" />

详细参考 Hibernate 实现多对一

以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>

详细请参考 Hibernate 实现多对多

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

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

详细请参考 Hibernate GET和LOAD的区别

这三种分别是HQL,Criteria标准SQL

实体类对象在Hibernate中有3种状态
分别是瞬时,持久和脱管

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

代码演示参考 Hibernate 对象的三种状态 瞬时 持久 脱管

Hibernate 有两种方式获得session,分别是:
OpenSession和getCurrentSession
他们的区别在于

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

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

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

代码演示参考 什么是Hibernate的一级缓存

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/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核