Hibernate面试问题是向学生询问的, 因为它是一种广泛使用的ORM工具。下面列出了针对初学者和专业人员的20个最冬眠面试问题和答案的重要列表。
1)什么是冬眠?
Hibernate是一个开源的轻量级ORM工具, 用于存储, 操作和检索数据库中的数据。
更多细节…
2)什么是ORM?
ORM是对象/关系映射的缩写。将对象与存储在数据库中的数据进行映射是一种编程策略。它简化了数据创建, 数据处理和数据访问。
3)解释Hibernate架构?
Hibernate体系结构包含许多接口, 例如Configuration, SessionFactory, Session, Transaction等。
更多细节…
4)Hibernate的核心接口是什么?
Hibernate框架的核心接口是:
- 组态
- 会话工厂
- 会议
- 询问
- 标准
- 交易
5)提到使用ORM优于JDBC的一些优点。
与JDBC相比, ORM具有以下优点:
- 应用程序开发速度很快。
- 交易管理。
- 自动生成密钥。
- SQL查询的详细信息被隐藏。
6)根据Hibernate定义标准。
条件的对象用于创建和执行面向对象的条件查询。
7)列出Hibernate支持的一些数据库。
Hibernate支持的一些数据库是:
- DB2
- MySQL
- 甲骨文
- Sybase SQL服务器
- Informix动态服务器
- HSQL
- PostgreSQL的
- FrontBase
8)列出Hibernate的关键组件。
Hibernate的关键组件是:
- 组态
- 会议
- 会话工厂
- 标准
- 询问
- 交易
9)提到Hibernate配置对象的两个组成部分。
数据库连接
类映射设置
10)如何在Hibernate中创建SQL查询?
SQL查询是通过以下语法创建的:
Session.createSQLQuery
11)HQL代表什么?
Hibernate查询语言
12)如何创建HQL查询?
使用以下语法创建HQL查询:
Session.createQuery
13)我们如何向SQL查询添加条件?
使用Session.createCriteria将条件添加到SQL查询。
14)定义持久类。
对象存储在数据库表中的类称为持久性类。
15)什么是SessionFactory?
SessionFactory提供Session的实例。这是Session的工厂。它保存默认情况下未启用的二级缓存的数据。
更多细节…
16)SessionFactory是线程安全的对象吗?
是的, SessionFactory是线程安全的对象, 许多线程无法同时访问它。
17)什么是会话?
它维护了Hibernate应用程序和数据库之间的连接。
它提供了从数据库存储, 更新, 删除或获取数据的方法, 例如persist(), update(), delete(), load(), get()等。
它是Query, Criteria和Transaction的工厂, 即它提供了返回这些实例的工厂方法。
更多细节…
18)会话是线程安全的对象吗?
不, Session不是线程安全的对象, 许多线程可以同时访问它。换句话说, 你可以在线程之间共享它。
19)session.save()和session.persist()方法有什么区别?
No. | save() | persist() |
---|---|---|
返回实例的标识符(可序列化)。 | 不返回任何内容, 因为其返回类型为void。 | |
Syn:公共可序列化保存(对象o) | Syn:public void持久(对象o) |
20)get和load方法有什么区别?
下面给出了get()和load()方法之间的区别。
No. | get() | load() |
---|---|---|
如果找不到对象, 则返回null。 | 如果找不到对象, 则引发ObjectNotFoundException。 | |
get()方法总是命中数据库。 | load()方法不会访问数据库。 | |
它返回真实对象, 而不是代理。 | 它返回代理对象。 | |
如果你不确定实例是否存在, 则应使用它。 | 如果你确定实例存在, 则应使用它。 |
21)更新和合并方法有什么区别?
下面给出了update()和merge()方法之间的区别。
No. | The update() method | merge() method |
---|---|---|
更新意味着编辑内容。 | 合并意味着合并某些东西。 | |
如果会话不包含具有相同ID的已持久状态, 则应使用update()。这意味着仅应在会话内使用更新。关闭会话后, 它将引发错误。 | 如果你不知道会话的状态, 则应使用merge(), 这意味着你想随时进行修改。 |
让我们尝试通过下面给出的示例了解差异:
...
SessionFactory factory = cfg.buildSessionFactory();
Session session1 = factory.openSession();
Employee e1 = (Employee) session1.get(Employee.class, Integer.valueOf(101));//passing id of employee
session1.close();
e1.setSalary(70000);
Session session2 = factory.openSession();
Employee e2 = (Employee) session1.get(Employee.class, Integer.valueOf(101));//passing same id
Transaction tx=session2.beginTransaction();
session2.merge(e1);
tx.commit();
session2.close();
关闭session1后, e1处于分离状态。它不会在session1缓存中。因此, 如果调用update()方法, 它将引发错误。
然后, 我们打开了另一个会话并加载了相同的Employee实例。如果我们在session2中调用merge, 则e1的更改将在e2中合并。
22)Hibernate中对象的状态是什么?
Hibernate中的对象(实例)有3种状态。
- 瞬态:如果对象刚刚创建但没有主键(标识符)并且与会话无关, 则处于瞬态状态。
- 持久性:如果打开了会话, 则对象处于持久性状态, 而你只是将实例保存在数据库中或从数据库中检索了实例。
- 已分离:如果关闭会话, 则对象处于分离状态。在分离状态之后, 如果你调用lock()或update()方法, 则对象将变为持久状态。
23)继承映射策略是什么?
Hibernate中有3种继承映射方式。
- 每个层次表
- 每个具体类别的表格
- 每个子类表
更多细节…
24)如何在Hibernate中创建一个不变的类?
如果将一个类标记为mutable =” false”, 则该类将被视为不可变类。默认情况下, 它是mutable =” true”。
25)什么是Hibernate中的自动脏检查?
Hibernate的自动脏检查功能会在事务中修改的对象上自动调用update语句。
让我们通过以下示例了解它:
...
SessionFactory factory = cfg.buildSessionFactory();
Session session1 = factory.openSession();
Transaction tx=session2.beginTransaction();
Employee e1 = (Employee) session1.get(Employee.class, Integer.valueOf(101));
e1.setSalary(70000);
tx.commit();
session1.close();
在这里, 获取雇员实例e1之后, 我们将更改e1的状态。
更改状态后, 我们将提交事务。在这种情况下, 状态将自动更新。这被称为Hibernate中的脏检查。
26)Hibernate中可以有几种类型的关联映射?
Hibernate中可以有4种类型的关联映射。
- 一对一
- 一对多
- 多对一
- 多对多
27)是否可以一对一和多对一执行集合映射?
不可以, 只能使用一对多和多对多执行映射。
28)什么是Hibernate中的延迟加载?
Hibernate中的延迟加载可提高性能。它按需加载子对象。
从Hibernate 3开始, 默认情况下启用了延迟加载, 因此你无需执行lazy =” true”。这意味着在加载父对象时不要加载子对象。
29)什么是HQL(Hibernate查询语言)?
Hibernate查询语言被称为面向对象的查询语言。它就像结构化查询语言(SQL)。
HQL相对于SQL的主要优点是:
- 你不需要学习SQL
- 与数据库无关
- 编写查询简单
30)一级缓存和二级缓存有什么区别?
No. | 一级缓存 | 二级缓存 |
---|---|---|
一级缓存与会话关联。 | 二级缓存与SessionFactory关联。 | |
默认情况下启用。 | 默认情况下未启用。 |
Java OOP面试问题 |
Java字符串和异常问题 |
JDBC面试问题 |
JSP面试问题 |
Hibernate面试问题 |
SQL面试题 |
Android面试题 |
MySQL面试问题 |
1)
2)
1)
2)
3)
4)
1)
2)
1)
2)
Java基础面试问题
Java多线程问题
Java Collection面试题
Servlet面试问题
春季面试问题
PL / SQL面试问题
Oracle面试问题
SQL Server面试问题
评论前必须登录!
注册