📜  Hibernate面试的前30个问题

📅  最后修改于: 2021-01-02 16:00:14             🧑  作者: Mango

休眠面试问题

休眠面试问题被问到学生,因为它是一种广泛使用的ORM工具。下面列出了针对初学者和专业人员的20个最冬眠面试问题和答案的重要列表。

1)什么是冬眠?

Hibernate是一个开源的轻量级ORM工具,用于存储,操作和从数据库检索数据。

2)什么是ORM?

ORM是对象/关系映射的首字母缩写。将对象与数据库中存储的数据进行映射是一种编程策略。它简化了数据创建,数据处理和数据访问。

3)解释休眠架构?

Hibernate体系结构由许多接口组成,例如Configuration,SessionFactory,Session,Transaction等。

4)Hibernate的核心接口是什么?

Hibernate框架的核心接口是:

  • 组态
  • 会话工厂
  • 届会
  • 询问
  • 标准
  • 交易

5)提到使用ORM优于JDBC的一些优点。

与JDBC相比,ORM具有以下优点:

  • 应用程序开发速度很快。
  • 交易管理。
  • 自动生成密钥。
  • SQL查询的详细信息被隐藏。

6)根据休眠定义标准。

条件的对象用于创建和执行面向对象的条件查询。

7)列出Hibernate支持的一些数据库。

Hibernate支持的一些数据库是:

  • DB2
  • 的MySQL
  • 甲骨文
  • Sybase SQL服务器
  • Informix动态服务器
  • HSQL
  • PostgreSQL的
  • FrontBase

8)列出Hibernate的关键组件。

Hibernate的关键组件是:

  • 组态
  • 届会
  • 会话工厂
  • 标准
  • 询问
  • 交易

9)提到Hibernate配置对象的两个组成部分。

数据库连接

类映射设置

10)如何在Hibernate中创建SQL查询?

SQL查询是通过以下语法创建的:

Session.createSQLQuery

11)HQL代表什么?

休眠查询语言

12)如何创建HQL查询?

使用以下语法创建HQL查询:

Session.createQuery

13)我们如何向SQL查询添加条件?

使用Session.createCriteria将条件添加到SQL查询。

14)定义持久类。

对象存储在数据库表中的类称为持久性类。

15)什么是SessionFactory?

SessionFactory提供Session的实例。这是Session的工厂。它保存默认情况下未启用的二级缓存的数据。

16)SessionFactory是线程安全的对象吗?

是的,SessionFactory是线程安全的对象,许多线程无法同时访问它。

17)什么是会话?

它维护了休眠应用程序和数据库之间的连接。

它提供了从数据库存储,更新,删除或获取数据的方法,例如persist(),update(),delete(),load(),get()等。

它是Query,Criteria和Transaction的工厂,即它提供了工厂方法来返回这些实例。

18)会话是线程安全的对象吗?

不,Session不是线程安全的对象,许多线程可以同时访问它。换句话说,您可以在线程之间共享它。

19)session.save()和session.persist()方法有什么区别?

No. save() persist()
1) returns the identifier (Serializable) of the instance. Return nothing because its return type is void.
2) Syn: public Serializable save(Object o) Syn: public void persist(Object o)

20)get和load方法有什么区别?

下面给出了get()和load()方法之间的区别。

No. get() load()
1) Returns null if an object is not found. Throws ObjectNotFoundException if an object is not found.
2) get() method always hit the database. load() method doesn’t hit the database.
3) It returns the real object, not the proxy. It returns proxy object.
4) It should be used if you are not sure about the existence of instance. It should be used if you are sure that instance exists.

21)更新和合并方法有什么区别?

下面给出了update()和merge()方法之间的区别。

No. The update() method merge() method
1) Update means to edit something. Merge means to combine something.
2) update() should be used if the session doesn’t contain an already persistent state with the same id. It means an update should be used inside the session only. After closing the session, it will throw the error. merge() should be used if you don’t know the state of the session, means you want to make the modification at any time.

让我们尝试通过下面的示例来了解差异:

...
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)休眠中对象的状态是什么?

休眠中的对象(实例)有3种状态。

  • 瞬态:如果对象刚刚创建但没有主键(标识符)并且与会话无关,则处于瞬态状态。
  • 持久:如果打开了会话,则对象处于持久状态,而您只是将实例保存在数据库中或从数据库中检索了该实例。
  • 已分离:如果关闭会话,则对象处于分离状态。在分离状态之后,如果您调用lock()或update()方法,则对象将变为持久状态。

23)继承映射策略是什么?

休眠中有3种继承映射方式。

  • 每个层次表
  • 每个具体类别的表格
  • 每个子类表

24)如何在休眠中创建一个不变的类?

如果将一个类标记为mutable =“ false”,则该类将被视为不可变类。默认情况下,它是mutable =“ true”。

25)什么是休眠中的自动脏检查?

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的状态。

更改状态后,我们将提交事务。在这种情况下,状态将自动更新。这被称为休眠中的脏检查。

26)休眠中可以有几种类型的关联映射?

休眠中可以有4种类型的关联映射。

  • 一对一
  • 一对多
  • 多对一
  • 多对多

27)是否可以一对一和多对一执行集合映射?

不可以,只能使用一对多和多对多执行收集映射。

28)什么是休眠中的延迟加载?

休眠中的延迟加载可提高性能。它按需加载子对象。

从Hibernate 3开始,默认情况下启用了延迟加载,您无需执行lazy =“ true”。这意味着在加载父对象时不加载子对象。

29)什么是HQL(休眠查询语言)?

休眠查询语言被称为面向对象的查询语言。它就像结构化查询语言(SQL)。

HQL相对于SQL的主要优点是:

  • 您不需要学习SQL
  • 与数据库无关
  • 编写查询简单

30)一级缓存和二级缓存有什么区别?

No. First Level Cache Second Level Cache
1) First Level Cache is associated with Session. Second Level Cache is associated with SessionFactory.
2) It is enabled by default. It is not enabled by default.