Hibernate最全面试题

Hibernate考试试题 (题库) Hibernate考试试题 (题库)   1、 在Hibernate中,下列说法正确的有(    )。【选三项】 A.Hibernate是一个开放源代码的对象关系映射框架 B.Hibernate对JDBC进行了轻量级的对象封装 C.Hibernate可以大大减少操作数据库的工作量 D.Hibernate提供了数据查询机制,但没有提供恢复机制   2、 关于Hibernate,下列说 阅读详情

Hibernate常见面试题

Hibernate工作原理及为什么要用?

Hibernate工作原理及为什么要用?

  1. 读取并解析配置文件
  2. 读取并解析映射信息,创建SessionFactory
  3. 打开Sesssion
  4. 创建事务Transation
  5. 持久化操作
  6. 提交事务
  7. 关闭Session
  8. 关闭SesstionFactory

使用Hibernate框架就不用我们写很多繁琐的SQL语句。Hibernate实现了ORM,能够将对象映射成数据库表,从而简化我们的开发!

Hibernate是如何延迟加载(懒加载)?

Hibernate是如何延迟加载(懒加载)?

通过设置属性lazy进行设置是否需要懒加载

当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

它们通过配置文件中的many-to-one、one-to-many、many-to-many来实现类之间的关联关系的。

hibernate的三种状态之间如何转换

hibernate的三种状态之间如何转换

Hibernate中对象的状态:

  • 临时/瞬时状态
  • 持久化状态
  • 游离状态

临时/瞬时状态

当我们直接new出来的对象就是临时/瞬时状态的..

  • 该对象还没有被持久化【没有保存在数据库中】
  • 不受Session的管理

这里写图片描述

持久化状态

当保存在数据库中的对象就是持久化状态了

  • 当调用session的save/saveOrUpdate/get/load/list等方法的时候,对象就是持久化状态
  • 在数据库有对应的数据
  • 受Session的管理
  • 当对对象属性进行更改的时候,会反映到数据库中!

这里写图片描述

我们来测试一下:当对对象属性进行更改的时候,会反映到数据库中!


        session.save(idCard);
        idCard.setIdCardName("我是测试持久化对象");

这里写图片描述

游离状态

当Session关闭了以后,持久化的对象就变成了游离状态了…

  • 不处于session的管理
  • 数据库中有对应的记录

这里写图片描述

有了上面的基础,我们就很容易说出它们之间的转换了

  • new出来的对象是瞬时状态->保存到数据库中(受Session管理)就是持久化状态->将session close掉就是游离状态

比较hibernate的三种检索策略优缺点

比较hibernate的三种检索策略优缺点

立即检索:

  • 优点: 对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象;
  • 缺点: 1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间;
  • 立即检索:lazy=false;

延迟检索:

  • 优点: 由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间;
  • 缺点: 应用程序如果希望访问游离状态代理类实例,必须保证他在持久化状态时已经被初始化;
  • 延迟加载:lazy=true;

迫切左外连接检索:

  • 优点: 1对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地冲一个对象导航到与它关联的对象。2使用了外连接,select语句数目少;
  • 缺点: 1 可能会加载应用程序不需要访问的对象,白白浪费许多内存空间;2复杂的数据库表连接也会影响检索性能;
  • 预先抓取: fetch=“join”;

hibernate都支持哪些缓存策略

hibernate都支持哪些缓存策略

usage的属性有4种:

  • 放入二级缓存的对象,只读(Read-only);
  • 非严格的读写(Nonstrict read/write)
  • 读写; 放入二级缓存的对象可以读、写(Read/write);
  • 基于事务的策略(Transactional)

hibernate里面的sorted collection 和ordered collection有什么区别

hibernate里面的sorted collection 和ordered collection有什么区别

sorted collection

  • 是在内存中通过Java比较器进行排序的

ordered collection

  • 是在数据库中通过order by进行排序的

对于比较大的数据集,为了避免在内存中对它们进行排序而出现 Java中的OutOfMemoryError,最好使用ordered collection。

说下Hibernate的缓存机制

说下Hibernate的缓存机制

一级缓存:

  • Hibenate中一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数! 只在session范围有效! Session关闭,一级缓存失效!
  • 只要是持久化对象状态的,都受Session管理,也就是说,都会在Session缓存中!
  • Session的缓存由hibernate维护,用户不能操作缓存内容; 如果想操作缓存内容,必须通过hibernate提供的evit/clear方法操作。

二级缓存:

  • 二级缓存是基于应用程序的缓存,所有的Session都可以使用
  • Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影响代码。
  • 如果用户觉得hibernate提供的框架框架不好用,自己可以换其他的缓存框架或自己实现缓存框架都可以。
  • Hibernate二级缓存:存储的是常用的类

这里写图片描述

Hibernate的查询方式有几种

Hibernate的查询方式有几种

  • 对象导航查询(objectcomposition)
  • HQL查询
    • 1、 属性查询
    • 2、 参数查询、命名参数查询
    • 3、 关联查询
    • 4、 分页查询
    • 5、 统计函数
  • Criteria 查询
  • SQLQuery本地SQL查询

如何优化Hibernate?

如何优化Hibernate?

  • Ø 数据库设计调整
  • Ø HQL优化
  • Ø API的正确使用(如根据不同的业务类型选用不同的集合及查询API)
  • Ø 主配置参数(日志,查询缓存,fetch_size, batch_size等)
  • Ø 映射文件优化(ID生成策略,二级缓存,延迟加载,关联优化)
  • Ø 一级缓存的管理
  • Ø 针对二级缓存,还有许多特有的策略

详情可参考资料:

谈谈Hibernate中inverse的作用

谈谈Hibernate中inverse的作用

inverse属性默认是false,就是说关系的两端都来维护关系。

  • 比如Student和Teacher是多对多关系,用一个中间表TeacherStudent维护。Gp)
  • 如果Student这边inverse=”true”, 那么关系由另一端Teacher维护,就是说当插入Student时,不会操作TeacherStudent表(中间表)。只有Teacher插入或删除时才会触发对中间表的操作。所以两边都inverse=”true”是不对的,会导致任何操作都不触发对中间表的影响;当两边都inverse=”false”或默认时,会导致在中间表中插入两次关系。

如果表之间的关联关系是“一对多”的话,那么inverse只能在“一”的一方来配置!

详情可参考:

JDBC hibernate 和 ibatis 的区别

JDBC hibernate 和 ibatis 的区别

jdbc:手动

  • 手动写sql
  • delete、insert、update要将对象的值一个一个取出传到sql中,不能直接传入一个对象。
  • select:返回的是一个resultset,要从ResultSet中一行一行、一个字段一个字段的取出,然后封装到一个对象中,不直接返回一个对象。

ibatis的特点:半自动化

  • sql要手动写
  • delete、insert、update:直接传入一个对象
  • select:直接返回一个对象

hibernate:全自动

  • 不写sql,自动封装
  • delete、insert、update:直接传入一个对象
  • select:直接返回一个对象

在数据库中条件查询速度很慢的时候,如何优化?

在数据库中条件查询速度很慢的时候,如何优化?

  1. 建索引
  2. 减少表之间的关联
  3. 优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面
  4. 简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据

详情可参考:

什么是SessionFactory,她是线程安全么

什么是SessionFactory,她是线程安全么

SessionFactory 是Hibrenate单例数据存储和线程安全的,以至于可以多线程同时访问。一个SessionFactory 在启动的时候只能建立一次。SessionFactory应该包装各种单例以至于它能很简单的在一个应用代码中储存.

get和load区别

get和load区别

  • get()立即查询

这里写图片描述

  • load()懒加载

这里写图片描述

  • 1)get如果没有找到会返回null, load如果没有找到会抛出异常。
  • 2)get会先查一级缓存, 再查二级缓存,然后查数据库;load会先查一级缓存,如果没有找到,就创建代理对象, 等需要的时候去查询二级缓存和数据库。

merge的含义:

merge的含义:

  • 如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象的状态覆盖旧有的持久实例
  • 如果session**没有相应的持久实例**,则尝试从数据库中加载,或创建新的持久化实例,最后返回该持久实例
  • 用户给出的这个对象没有被关联到session上,它依旧是脱管的

详情可参考:

persist和save的区别

persist和save的区别

  • persist不保证立即执行,可能要等到flush;
  • persist不更新缓存;
  • save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert
  • 使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);
  • 使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。

参考资料:

主键生成 策略有哪些

主键生成 策略有哪些

主键的自动生成策略

  • identity 自增长(mysql,db2)
  • sequence 自增长(序列), oracle中自增长是以序列方法实现**
  • native 自增长【会根据底层数据库自增长的方式选择identity或sequence】
    • 如果是mysql数据库, 采用的自增长方式是identity
    • 如果是oracle数据库, 使用sequence序列的方式实现自增长
  • increment 自增长(会有并发访问的问题,一般在服务器集群环境使用会存在问题。)

指定主键生成策略为手动指定主键的值

  • assigned

指定主键生成策略为UUID生成的值

  • uuid

foreign(外键的方式)

简述hibernate中getCurrentSession和openSession区别

简述hibernate中getCurrentSession和openSession区别

  • 1、getCurrentSession会绑定当前线程,而openSession不会,因为我们把hibernate交给我们的spring来管理之后,我们是有事务配置,这个有事务的线程就会绑定当前的工厂里面的每一个session,而openSession是创建一个新session。
  • 2、getCurrentSession事务是有spring来控制的,而openSession需要我们手动开启和手动提交事务,
  • 3、getCurrentSession是不需要我们手动关闭的,因为工厂会自己管理,而openSession需要我们手动关闭。
  • 4、而getCurrentSession需要我们手动设置绑定事务的机制,有三种设置方式,jdbc本地的Thread、JTA、第三种是spring提供的事务管理机制org.springframework.orm.hibernate4.SpringSessionContext,而且srping默认使用该种事务管理机制

Hibernate中的命名SQL查询指的是什么?

Hibernate中的命名SQL查询指的是什么?

  • 命名查询指的是用<sql-query>标签在影射文档中定义的SQL查询,可以通过使用Session.getNamedQuery()方法对它进行调用。命名查询使你可以使用你所指定的一个名字拿到某个特定的查询。
  • Hibernate中的命名查询可以使用注解来定义,也可以使用我前面提到的xml影射问句来定义。在Hibernate中,@NameQuery用来定义单个的命名查询,@NameQueries用来定义多个命名查询。

为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?

为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?

每个Hibernate实体类必须包含一个 无参数的构造器, 这是因为Hibernate框架要使用Reflection API,通过调用Class.newInstance()来创建这些实体类的实例。如果在实体类中找不到无参数的构造器,这个方法就会抛出一个InstantiationException异常。

可不可以将Hibernate的实体类定义为final类?

可不可以将Hibernate的实体类定义为final类?

你可以将Hibernate的实体类定义为final类,但这种做法并不好。因为Hibernate会使用代理模式在延迟关联的情况下提高性能,如果你把实体类定义成final类之后,因为 Java不允许对final类进行扩展,所以Hibernate就无法再使用代理了, 如此一来就限制了使用可以提升性能的手段。

最后

参考资料:


如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y

Windows安装Pytorch3d pytorch和pytorch3d版本对应关系如下:https://github.com/facebookresearch/pytorch3d/releasescuda和NVIDIA CUB版本对应关系如下:https://github.com/NVIDIA/cub/releases?page=1本人配置如下:GPU:1050TiCUDA:11.1python:3.8。 阅读详情

相关推荐

Kindle电子书DRM破解全攻略:从下载到转换的完整流程(含最新DeDRM插件配置)

本文详细介绍了如何合法移除个人购买的Kindle电子书的DRM保护,实现跨设备阅读与备份。核心内容包括使用最新DeDRM插件(如noDRM分支)配合Calibre进行配置,并针对亚马逊最新的KFX加密格式提供了密钥提取与实战操作指南。文章强调该方法仅适用于个人合理使用,旨在帮助读者真正掌控自己的数字资产。

delta的博客 575

[Java面试八]Hibernate总结以及在面试中的一些问题.

1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 ②.Hibernate 是一个基于JDBC的主流持久化框架,是一个优秀的ORM 实现。他很大程度的简化DAO层的编码工作 ③.hibernate 的性能非常好,因

qq_35833843的博客 623

Slurm集群调度策略详解(1)-主调度

Slurm调度系统中针对作业的调度主要有三种,主调度,回填调度,GANG调度,这篇文章主要针对主调度进行解析。

h_m_l的博客 6030

Java 常见的面试题(Hibernate)

Java 常见的面试题(Hibernate)

MR.骑士道 5926

Claude Code 的 Subagent 到底怎么用?

Subagent是ClaudeCode中的专业化AI代理系统,每个代理专注单一领域(如代码审查、数据库设计),具备独立记忆空间和并行处理能力。适用于中大型项目开发,通过配置文件定义代理职责与权限,可显式调用或自动触发多代理协作。典型场景包括代码安全审查、全栈并行开发和技术方案对比。使用时需注意避免过度拆分、权限过宽等陷阱,结合链式工作流和负载均衡可显著提升效率。实测在电商项目开发中能缩短20%工期并提升40%性能。

bgeyq的博客 1992

FPGA开发者必看:Xilinx PCIe IP核BAR地址配置避坑指南(附实例解析)

本文为FPGA开发者提供了Xilinx PCIe IP核中BAR地址配置的详细避坑指南。文章深入解析了32位与64位地址空间的选择逻辑、Pcie to AXI Translation参数的核心作用,并通过实例说明如何正确配置以避免地址映射错乱和数据访问失败。重点探讨了BAR空间类型、大小设定以及地址转换机制,帮助开发者构建清晰可靠的PCIe系统,是调试与优化PCIe设计的关键参考。

weixin_29252171的博客 424

Hibernate常见面试题

每个 Session 对象只代表一个数据库连接,它是非线程安全的,应该在每个事务中使用一个新的 Session 对象。例如,如果一个实体类具有一个关联对象列表,并且该列表被定义为延迟加载,那么只有在访问该列表时,Hibernate 才会执行 SQL 查询语句。Hibernate 中的缓存是一种存储在内存中的数据结构,用于存储经常访问的实体类和关联对象。一级缓存(Session 缓存)是 Session 对象的缓存,它存储着已经从数据库中查询出来的对象,以避免多次查询同一个对象。

lonely_baby的博客 850

一文搞懂雷达脉冲压缩和匹配滤波器

为了解决传统单频脉冲雷达面临的作用距离和空间分辨力之间的矛盾,脉冲压缩理论被提出。在接收端设计一个和发射信号能够“共轭匹配”的网络来实现脉冲压缩。接收到的回波信号通过匹配滤波器时,滤波器的增益在信号越强的频率点越大;在信号越弱的频率点,增益越小,通过这样的方式使信号在时域更加集中。脉冲压缩技术大致可分为线性调频(LFM)和相位编码。其中LFM信号易于通过硬件或各种技术产生,但是进行匹配滤波后主旁瓣比高达13.2dB,在检测多个目标时,强目标的回波旁瓣可能会把弱小信号覆盖,导致弱小信号的检测受到影响。

FPGA入门到跑路 9935

Hibernate常见面试题和答案

1. 为什么要使用 hibernate? (1). 对JDBC做了轻量级的封装,简化了数据访问层编码。 (2). Hibernate是一个ORM框架,开发者可以使用面向对象的思想操作数据库,使用更加方便。 (4). hibernate映射很灵活,支持各种关系数据库,从一对一到多对多的各种复杂关系。 一对多,...

哈哈彬的博客 2249

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 361

电源防反接保护电路全攻略实战A04

本文深入剖析了硬件设计中电源保护电路的关键技术与实战经验。文章指出,保护电路虽小但至关重要,通过对比分析二极管与MOSFET防反接方案,揭示了MOSFET在效率、温控方面的优势。针对过压保护,重点讲解了TVS二极管选型要点,强调钳位电压而非击穿电压才是保护核心。文章结合工业案例(如48V通信模块烧毁、5V系统MOSFET过热等),详细阐述了PCB布局规范、热设计路径等工程细节,并提供了USB接口ESD防护的完整选型方案。最后强调硬件设计必须考虑最坏工况,在成本与性能间找到平衡点,避免因小失大。

启芯硬件的博客 776

Hibernate常用面试题

一)什么是Hibernate Hibernate是一种用于Java环境的对象/关系映射解决方案。术语“对象/关系映射”是指将数据从对象模型表示映射到关系数据模型表示的技术(反之亦然)。 二)Hibernate优势 1、对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2、Hibernate是一个基于JDBC的主流持久层框架,基于ORM实现。很大程度的简化DAO...

p812438109的专栏 982

2026年算法工程师常见面试简答题

本文摘要:文章系统梳理了机器学习与深度学习中的30个核心概念,涵盖模型优化、评估指标、经典算法和大模型应用等关键知识点。主要内容包括:1)过拟合与欠拟合的成因及解决方法;2)偏差-方差权衡原理;3)数据划分与交叉验证策略;4)分类/回归任务评估指标选择;5)逻辑回归、决策树、SVM等传统算法解析;6)梯度下降优化与正则化技术;7)CNN、RNN、Transformer架构对比;8)Embedding表示与RAG技术。特别强调面试高频考点如XGBoost改进、注意力机制原理等,并给出实际工程中的解决方案建议,

不务正业的猿 349

hibernate和mybatis面试题,2024年上半年最接地气的Java面经

我们先来了解一下主备同步的原理,下面以一个update语句来介绍主库与备库间是如何进行同步的。主备同步的工作原理其实就是一个完全备份加上二进制日志备份的还原。不同的是这个二进制日志的还原操作基本上是实时的。从上面的流程可以看出,主备同步的关键是binlog。

2401_84413145的博客 1061

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Hibernate面试题+答案

Hibernate面试题+答案

hdfyhf的博客 3209

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hibernate常见面试题详解

整理hibernate常见面试题 简述hibernate运行原理或者工作原理 简述hibernate的get和load方法区别 简述hibernate数据三种状态 简述hibernate的缓存机制 简述hibernate中getCurrentSession和openSession区别 简述hibernate的乐观锁和悲观锁 简述hibernate的懒加载机制 简述hibernate...

wu1317581750的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

struts2,spring,hibernate面试题总结THREE

Spring,hibernate,struts的面试笔试题(含答案) Hibernate的相关试题: 1、Hibernate的工作原理? hibernate的初始化  读取hibernate的配置信息,创建SessionFactory。 A、 创建Configeration的实例。    它的构造方法:将配置文件信息(hibernate-config.xml)读入到内存。一个Config

greensomnuss的博客 7468

java hibernate 面试题_Java常见的框架面试题——HIBERNATE面试题

原标题:Java常见的框架面试题——HIBERNATE面试题想拿高工资,面试中不单遇到的Java基础问题了吧?框架问题也设计到了吧?哈哈哈,前沿教育小编又来发福利了,框架常见的几个问题都在这里了。hibernate面试题示例1 :什么是HIBERNATEHIBERNATE是一种轻量级的ORM的实现,是对JDBC的一种封装。 ORM是意思是对象与关系数据库之间的映射Object Relation D...

weixin_35876760的博客 199

Hibernate考试试题(部分题库)含答案

Hibernate考试试题 (题库) 1、 在Hibernate中,下列说法正确的有( ABC )。【选三项】 A.Hibernate是一个开放源代码的对象关系映射框架 B.Hibernate对JDBC进行了轻量级的对象封装 C.Hibernate可以大大减少操作数据库的工作量 D.Hibernate提供了数据查询机制,但没有提供恢复机制 2、 关于Hibernate,...

weixin_30254435的博客 3682

java hibernate 面试题_Java Hibernate面试65题

​Java Hibernate面试65题大家好,这一期呢,我们谈一下Java hibernate相关的面试题。第1题,什么是hibernate?hibernate是一个架构, 用来对应Java对象数据库表对象。使用一个xml文件来配置。第2题, 什么是orm?object relational mapping。它是hibernate的基础概念。用来对应数据库表跟Java对象。第3题, Java类属...

weixin_33212575的博客 646

hibernate面试题

常见hibernate面试题(转载) 1.Hibernate有哪几种查询数据的方式       (1)导航对象图查询       (2)OID查询       (3)HQL       (4)QBC       (5)本地SQL 2.load()和get()的区别 load加载方法: Java代码 Users user = (Users)session.load(Users.class...

fw2的博客 135
上一篇: Struts2【整合Spring】
下一篇: Struts2入门这一篇就够了
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值