JavaRush /Java 博客 /Random-ZH /Hibernate 面试问题
Dr-JohnZoidberg
第 41 级
Киев

Hibernate 面试问题

已在 Random-ZH 群组中发布
本文是对国外文章的翻译和改进(文末列出了资源列表)。扩展了一些问题的答案,提供了第三方资源的链接,其中包含阅读过程中可能出现的答案。1)什么是休眠?它是一个将实体对象关系映射到传统关系数据库的框架。该框架的主要特点: 1)数据库中表的自动生成和更新;2)由于对数据库的主要查询(保存、更新、删除、搜索)都以框架的方法的形式呈现,大大减少了开发人员编写的代码;3) 提供类SQL语言的使用(HQL——hibernate查询语言)。HQL 查询可以与数据对象(为使用数据库而准备的 POJO 类)一起编写。2) 如何冬眠对编程有帮助吗?Hibernate 实现了许多功能,极大地简化了开发人员的工作。— 这些特性之一是 hibernate 允许开发人员避免编写大多数 SQL 查询(它们已经实现,您只需要使用框架提供的方法即可)。— 在底层,Hibernate 有很多有用的工具可以显着加快应用程序的速度,其中最值得注意的是两级缓存以及微调惰性和获取提取。— 在数据库本身中生成表。3) 配置 Hibernate 工作的方法。有四种方法可以配置 Hibernate 的工作: - 使用注释;- hibernate.cfg.xml;- 休眠属性;- 持久性.xml。最常见的配置方法:通过注解和persistence.xml文件,至于hibernate.properties和hibernate.cfg.xml文件,那么hibernate.cfg.xml更重要(如果应用程序有这两个文件,那么设置来自hibernate.cfg 文件被接受。xml)。使用注释进行配置虽然方便,但并不总是可行;例如,如果您希望针对不同的数据库或不同的情况有不同的实体配置,那么您应该使用 xml 配置文件。4)Hibernate使用了哪些关键接口?每个 Hibernate 相关应用程序都会用到五个关键接口: - Session 接口;- SessionFactory接口;— 配置界面;— 交易接口;— 查询和条件接口。5)Hibernate中Session接口的作用是什么?Session是负责与数据库通信的主要接口。它还有助于创建请求对象来获取持久对象。(持久对象 - 已经存在于数据库中的对象;请求对象 - 当我们收到数据库中查询结果时获得的对象,应用程序正是通过它来工作的)。Session对象可以从SessionFactory中获取: Session session = sessionFactory.openSession(); Session接口的作用:是jdbc连接数据库的包装器;(https://ru.wikipedia.org/wiki/Java_Database_Connectiv..) - 是一个事务工厂(根据官方文档事务) - 允许应用程序定义工作单元,这本质上意味着事务定义与数据库相关的操作的边界)。— 是强制一级缓存的保管人。6)Hibernate中SessionFactory接口的作用是什么?我们从SessionFactory对象中获取Session类型的对象。整个应用程序只有一个SessionFactory,它在应用程序启动时被初始化。SessionFactory 缓存应用程序在运行期间频繁使用的元数据和 SQL 查询。它还缓存在其中一项事务中接收到的信息,并可在其他事务中使用。可以使用以下调用获取 SessionFactory 对象:SessionFactory sessionFactory = 配置.buildSessionFactory(); 7)Hibernate中提供了哪些类型的集合?包、集合、列表、地图、数组。8) 什么是 Bag 类型集合以及为什么使用它?在其实现上,Bag集合类型与Set非常相似,不同之处在于Bag可以存储重复值。Bag 存储未索引的元素列表。数据库中的大多数表都具有显示数据元素相对于彼此的位置的索引;这些索引在表中表示为单独的列。通过对象关系映射,索引列的值被映射到 Array 中的索引、List 中的索引或 Map 中的键。如果需要获取不包含索引数据的对象集合,那么可以使用Bag或Set类型的集合(集合包含未排序形式的数据,但可以根据请求进行排序)。9) load(); 方法的操作有何不同?和获取();?加载()方法;通常在您不确定所请求的对象是否已在数据库中时使用。如果没有找到该对象,则该方法抛出异常;如果找到该对象,该方法返回一个代理对象,该对象是位于数据库中的对象的链接(尚未发出数据库请求,一种的懒惰检索),当我们直接请求数据库时,我们通过代理对象直接访问所需的对象。get() 方法;然后使用时,您不能 100% 确定所请求的对象是否在数据库中。在访问不存在的对象的情况下,get();方法 将返回 null。如果找到对象,则调用 get() 方法;将返回对象本身并立即进行数据库查询。10) Hibernate 中的延迟获取是什么?Hibernate 中的延迟签出类型与叶(子)实体关联,并在存在签出父实体的请求时定义共享签出策略。一个简单的例子:有一个实体House。它存储有关其号码、街道、公寓数量的信息以及有关居住在公寓中的家庭的信息;这些家庭形成相对于 House 实体的子实体。当我们请求有关房屋的信息时,我们可能完全没有必要知道有关居住在其中的家庭的信息,这里延迟获取可以帮助我们,它允许我们配置房屋实体,以便仅提供有关家庭的信息根据请求,这可以显着降低请求并加快应用程序的速度。©dev-bay 数据库中的大多数表都具有显示数据元素相对于彼此的位置的索引;这些索引在表中表示为单独的列。通过对象关系映射,索引列的值被映射到 Array 中的索引、List 中的索引或 Map 中的键。如果需要获取不包含索引数据的对象集合,那么可以使用Bag或Set类型的集合(集合包含未排序形式的数据,但可以根据请求进行排序)。9) load(); 方法的操作有何不同?和获取();?加载()方法;通常在您不确定所请求的对象是否已在数据库中时使用。如果没有找到该对象,则该方法抛出异常;如果找到该对象,该方法返回一个代理对象,该对象是位于数据库中的对象的链接(尚未发出数据库请求,一种的懒惰检索),当我们直接请求数据库时,我们通过代理对象直接访问所需的对象。get() 方法;然后使用时,您不能 100% 确定所请求的对象是否在数据库中。在访问不存在的对象的情况下,get();方法 将返回 null。如果找到对象,则调用 get() 方法;将返回对象本身并立即进行数据库查询。10) Hibernate 中的延迟获取是什么?Hibernate 中的延迟签出类型与叶(子)实体关联,并在存在签出父实体的请求时定义共享签出策略。一个简单的例子:有一个实体House。它存储有关其号码、街道、公寓数量的信息以及有关居住在公寓中的家庭的信息;这些家庭形成相对于 House 实体的子实体。当我们请求有关房屋的信息时,我们可能完全没有必要知道有关居住在其中的家庭的信息,这里延迟获取可以帮助我们,它允许我们配置房屋实体,以便仅提供有关家庭的信息根据请求,这可以显着降低请求并加快应用程序的速度。©dev-bay 数据库中的大多数表都具有显示数据元素相对于彼此的位置的索引;这些索引在表中表示为单独的列。通过对象关系映射,索引列的值被映射到 Array 中的索引、List 中的索引或 Map 中的键。如果需要获取不包含索引数据的对象集合,那么可以使用Bag或Set类型的集合(集合包含未排序形式的数据,但可以根据请求进行排序)。9) load(); 方法的操作有何不同?和获取();?加载()方法;通常在您不确定所请求的对象是否已在数据库中时使用。如果没有找到该对象,则该方法抛出异常;如果找到该对象,该方法返回一个代理对象,该对象是位于数据库中的对象的链接(尚未发出数据库请求,一种的懒惰检索),当我们直接请求数据库时,我们通过代理对象直接访问所需的对象。get() 方法;然后使用时,您不能 100% 确定所请求的对象是否在数据库中。在访问不存在的对象的情况下,get();方法 将返回 null。如果找到对象,则调用 get() 方法;将返回对象本身并立即进行数据库查询。10) Hibernate 中的延迟获取是什么?Hibernate 中的延迟签出类型与叶(子)实体关联,并在存在签出父实体的请求时定义共享签出策略。一个简单的例子:有一个实体House。它存储有关其号码、街道、公寓数量的信息以及有关居住在公寓中的家庭的信息;这些家庭形成相对于 House 实体的子实体。当我们请求有关房屋的信息时,我们可能完全没有必要知道有关居住在其中的家庭的信息,这里延迟获取可以帮助我们,它允许我们配置房屋实体,以便仅提供有关家庭的信息根据请求,这可以显着降低请求并加快应用程序的速度。©dev-bay 当我们通过代理对象直接访问所需对象时,直接查询数据库。get() 方法;然后使用时,您不能 100% 确定所请求的对象是否在数据库中。在访问不存在的对象的情况下,get();方法 将返回 null。如果找到对象,则调用 get() 方法;将返回对象本身并立即进行数据库查询。10) Hibernate 中的延迟获取是什么?Hibernate 中的延迟签出类型与叶(子)实体关联,并在存在签出父实体的请求时定义共享签出策略。一个简单的例子:有一个实体House。它存储有关其号码、街道、公寓数量的信息以及有关居住在公寓中的家庭的信息;这些家庭形成相对于 House 实体的子实体。当我们请求有关房屋的信息时,我们可能完全没有必要知道有关居住在其中的家庭的信息,这里延迟获取可以帮助我们,它允许我们配置房屋实体,以便仅提供有关家庭的信息根据请求,这可以显着降低请求并加快应用程序的速度。©dev-bay 当我们通过代理对象直接访问所需对象时,直接查询数据库。get() 方法;然后使用时,您不能 100% 确定所请求的对象是否在数据库中。在访问不存在的对象的情况下,get();方法 将返回 null。如果找到对象,则调用 get() 方法;将返回对象本身并立即进行数据库查询。10) Hibernate 中的延迟获取是什么?Hibernate 中的延迟签出类型与叶(子)实体关联,并在存在签出父实体的请求时定义共享签出策略。一个简单的例子:有一个实体House。它存储有关其号码、街道、公寓数量的信息以及有关居住在公寓中的家庭的信息;这些家庭形成相对于 House 实体的子实体。当我们请求有关房屋的信息时,我们可能完全没有必要知道有关居住在其中的家庭的信息,这里延迟获取可以帮助我们,它允许我们配置房屋实体,以便仅提供有关家庭的信息根据请求,这可以显着降低请求并加快应用程序的速度。©dev-bay
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION