Hibernate

Hibernate——建立第一个hibernate项目 背景:今天学习了考研内容。 阅读详情
####Hibernate中get和load有什么不同之处?


把get和load放到一起进行对比是Hibernate面试时最常问到的问题,这是因为只有正确理解get()和load()这二者后才有可能高效地使用Hibernate。get和load的最大区别是,如果在缓存中没有找到相应的对象,get将会直接访问数据库并返回一个完全初始化好的对象,而这个过程有可能会涉及到多个数据库调用;而load方法在缓存中没有发现对象的情况下,只会返回一个代理对象,只有在对象getId()之外的其它方法被调用时才会真正去访问数据库,这样就能在某些情况下大幅度提高性能。你也可以参考 Hibernate中get和load的不同之处, 此链接给出了更多的不同之处并对该问题进行了更细致的讨论。


####Hibernate中save、persist和saveOrUpdate这三个方法的不同之处?


除了get和load,这又是另外一个经常出现的Hibernate面试问题。 所有这三个方法,也就是save()、saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别。例如,save()只能INSERT记录,但是saveOrUpdate()可以进行 记录的INSERT和UPDATE。还有,save()的返回值是一个Serializable对象,而persist()方法返回值为void。你还可以访问 save、persist以及saveOrUpdate,找到它们所有的不同之处。


####Hibernate中的SessionFactory有什么作用?


SessionFactory是线程安全的吗? 这也是Hibernate框架的常见面试问题。顾名思义,SessionFactory就是一个用于创建Hibernate的Session对象的工厂。SessionFactory通常是在应用启动时创建好的,应用程序中的代码用它来获得Session对象。作为一个单个的数据存储,它也是 线程安全的,所以多个线程可同时使用同一个SessionFactory。Java JEE应用一般只有一个SessionFactory,服务于客户请求的各线程都通过这个工厂来获得Hibernate的Session实例,这也是为什么SessionFactory接口的实现必须是线程安全的原因。还有,SessionFactory的内部状态包含着同对象关系影射有关的所有元数据,它是 不可变的,一旦创建好后就不能对其进行修改了。


####Hibernate中的Session指的是什么?


可否将单个的Session在多个线程间进行共享? 前面的问题问完之后,通常就会接着再问这两个问题。问完SessionFactory的问题后就该轮到Session了。Session代表着Hibernate所做的一小部分工作,它负责维护者同数据库的链接而且 不是线程安全的,也就是说,Hibernage中的Session不能在多个线程间进行共享。虽然Session会以主动滞后的方式获得数据库连接,但是Session最好还是在用完之后立即将其关闭。


hibernate中sorted collection和ordered collection有什么不同? T这个是你会碰到的所有Hibernate面试问题中比较容易的问题。sorted collection是通过使用 Java的Comparator在内存中进行排序的,ordered collection中的排序用的是数据库的order by子句。对于比较大的数据集,为了避免在内存中对它们进行排序而出现 Java中的OutOfMemoryError,最好使用ordered collection。


####Hibernate中transient(瞬态/自由态)、persistent(持久态)、detached(游离态/托管态)对象三者之间有什么区别?


在Hibernate中,对象具有三种状态:transient、persistent和detached。同Hibernate的session有关联的对象是persistent对象。对这种对象进行的所有修改都会按照事先设定的刷新策略,反映到数据库之中,也即,可以在对象的任何一个属性发生改变时自动刷新,也可以通过调用Session.flush()方法显式地进行刷新。如果一个对象原来同Session有关联关系,但当下却没有关联关系了,这样的对象就是detached的对象。你可以通过调用任意一个session的update()或者saveOrUpdate()方法,重新将该detached对象同相应的seesion建立关联关系。Transient对象指的是新建的持久化类的实例,它还从未同Hibernate的任何Session有过关联关系。同样的,你可以调用persist()或者save()方法,将transient对象变成persistent对象。可要记住,这里所说的transient指的可不是 Java中的transient关键字,二者风马牛不相及。


####Hibernate中Session的lock()方法有什么作用?


这是一个比较棘手的Hibernate面试问题,因为Session的lock()方法重建了关联关系却并没有同数据库进行同步和更新。因此,你在使用lock()方法时一定要多加小心。顺便说一下,在进行关联关系重建时,你可以随时使用Session的update()方法同数据库进行同步。有时这个问题也可以这么来问:Session的lock()方法和update()方法之间有什么区别?。这个小节中的关键点也可以拿来回答这个问题。


####Hibernate中二级缓存指的是什么?


这是同Hibernate的缓存机制相关的第一个面试问题,不出意外后面还会有更多这方面的问题。二级缓存是在SessionFactory这个级别维护的缓存,它能够通过节省几番数据库调用往返来提高性能。还有一点值得注意,二级缓存是针对整个应用而不是某个特定的session的。


####Hibernate中的查询缓存指的是什么?


这个问题有时是作为上个Hibernate面试问题的后继问题提出的。查询缓存实际上保存的是sql查询的结果,这样再进行相同的sql查询就可以之间从缓存中拿到结果了。为了改善性能,查询缓存可以同二级缓存一起来使用。Hibernate支持用多种不同的开源缓存方案,比如EhCache,来实现查询缓存。


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


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


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


是的,你可以将Hibernate的实体类定义为final类,但这种做法并不好。因为Hibernate会使用代理模式在延迟关联的情况下提高性能,如果你把实体类定义成final类之后,因为 Java不允许对final类进行扩展,所以Hibernate就无法再使用代理了,如此一来就限制了使用可以提升性能的手段。不过,如果你的持久化类实现了一个接口而且在该接口中声明了所有定义于实体类中的所有public的方法轮到话,你就能够避免出现前面所说的不利后果。


原文引至[http://www.oschina.net/translate/10-hibernate-interview-questions-answers-java-j2ee-senior](http://www.oschina.net/translate/10-hibernate-interview-questions-answers-java-j2ee-senior)
hibernate还有人用吗 🏆作者简介:哪吒,优快云2022博客之星Top1、优快云2021博客之星Top2、多届新星计划导师✌、博客专家💪,专注Java硬核干货分享,立志做到Java赛道全网Top N。🏆本文收录于,,目前已经700+订阅,优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。🏆姐妹篇,,包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。🏆姐妹进阶篇, 阅读详情

相关推荐

蓝牙开发那些事之ceva controller代码解读

对比ceva的经典蓝牙和ble的controller在软件上的差异点

袁赟的博客 1090

hibernate中sorted collection和ordered collection区别

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34064653的博客 268

NCBI Datasets CLI优化:解决基因组数据下载报错与速度问题

基因组数据下载是生物信息学分析的关键环节,其稳定性和效率直接影响研究进度。NCBI Datasets CLI作为官方命令行工具,常面临连接中断和下载速度慢两大痛点,这主要源于服务器连接限制和网络传输问题。通过自动重试机制和校验修复流程可提升稳定性,而连接复用与CDN加速等技术能显著提高下载效率。在植物基因组等大规模数据场景中,结合脱水模式和增量更新策略可减少70%传输量。本文以艾草基因组项目为例,展示如何通过并行下载和API优化将100个基因组的下载时间从18小时缩短至2小时,为生物信息学研究提供可靠的数据

weixin_29051245的博客 243

hibernate 关联表的属性排序_hibernate面试题

* 比较Hibernate的三种检索策略优缺点1立即检索;优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象;缺点:1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间;2延迟检索:优点:由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对...

weixin_30293523的博客 589

SAP PP后台配置实战:从BOM到工艺路线的全流程解析

本文详细解析了SAP PP模块后台配置的全流程,从BOM到工艺路线的关键步骤与实战技巧。通过分享生产计划、工作中心能力计划等核心配置经验,帮助企业优化生产管理流程,提升SAP系统实施效率。特别针对BOM配置、工艺路线设置等常见问题提供解决方案。

weixin_29300931的博客 1010

从NHANES到发表:如何用survey包完成符合CDC要求的统计分析(含完整R代码)

本文详细介绍了如何利用R语言的survey包,对美国国家健康与营养调查数据进行符合CDC要求的统计分析。文章重点解析了NHANES数据的复杂抽样设计、权重变量的正确选择与调整,并提供了从数据获取、清洗、构建调查设计对象到执行加权回归及生成发表级表格的完整R代码实战指南,帮助研究者避免常见错误,确保分析结果的准确性与可发表性。

weixin_29054245的博客 521

Hibernate面试问题集锦: 概述

资料来源:http://www.importnew.com/2281.html 英文原文:Java Success,编译:ImportNew - 朱伟杰 Q.怎么配置Hibernate? A.Configuration类使用配置hibernate.cfg.xml(或者hibernate.properties)以及映射文件*.hbm.xml来创建(例如,配置和引导hibernate)Sess...

fxrWinters的博客 166

VGG16

VGG16学习笔记

一去不复返的通信er 1177

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

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

qq_35833843的博客 624

(二)使用VS2022克隆下载C++自制植物大战僵尸游戏教程

本文将介绍如何使用VS2022克隆下载《植物大战僵尸C++自制版本》。Gitee项目地址:Gitee仓库地址Github项目地址:Github仓库地址游戏官网地址(下载可直接运行)游戏官网。

尔灵尔亿的博客 4933

【Flink】FLink session yarn kerberos认证报错 PortUnreachableException: ICMP Port Unreachable

本篇博客是在上一篇博客:【Flink】FLink session yarn kerberos认证报错 KrbException: Cannot locate default realm还没找到原因的时候做的一次尝试。因为项目需要,我们需要对接华为认证的yarn集群,运行flink任务,我们的任务分为两种,yarn pre-job模式和flink session模式。我们在配置文件中配置如下# kerberos认证需要的东西提交任务的脚本如下。

九师兄 1267

Hibernate常用面试题

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

p812438109的专栏 982

多径衰落信道的 MATLAB 仿真

在无线通信系统中,信号在传输过程中会经历多径传播现象,导致信号在接收端出现时域和频域上的扩展。通过以上示例代码,我们可以进行多径衰落信道的 MATLAB 仿真。同时,我们还可以通过调整信道参数和信号特性,进一步研究多径衰落对系统性能的影响。常用的模型之一是瑞利衰落信道模型,它假设信号在传输过程中受到多个散射路径的影响。除了瑞利衰落信道模型,我们还可以使用其他类型的信道模型,如高斯衰落信道模型。在上述代码中,我们首先定义了信道的参数,包括最大多普勒频移、多径延迟和多径功率衰落。函数来模拟高斯衰落信道。

TechCraze的博客 665

UFS Hibernate介绍--代码部分

一 . UFS Hibernate简介

guozhidixian的博客 3856

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UFS Hibernate介绍--协议部分

一. UFS Hibernate 简介 Hibernate是一种Unipro的状态,这个Hibernate 进出的流程是在M-PHY定义的。 Hibernate 是一种 UniPro 状态,其中 PHY 处于 HIBERNATE_STATE,UniPro 堆栈保持 只有最小的一组功能处于活动状态。 UniPro 堆栈保留每个堆栈层定义的最小状态。 在休眠期间,UniPro 堆栈无法进行应用级数据传输/通信, 并且应用程序级接口的原语 T_CO_SAP 具有未定义的行为。 中 休眠,DME 继续可供 DM

guozhidixian的博客 3939

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

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

【hibernate进阶】hibernate搭建开发环境+实例讲解

本篇博客将带着大家以一个简单的实例来学习hibernate项目。 1、创建java项目 2、创建User Library,加入依赖包 * HIBERNATE_HOME/lib/*.jar * HIBERNATE_HOME/hibernate3.jar * 加入数据库驱动(mysql驱动) 具体的操作步骤参考我的上一篇博客:【hibernate进阶】如何在myeclipse中添加ja

陈晓婵 8423

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

hibernate实战

离下班还有半个小时,写这个东东吧。 今天写了个hibernate实例。 第一步:向工程中添加hibernate的lib           * HIBERNATE_HOME/hibernate3.jar           * HIBERNATE_HOME/lib/*.jar           * 数据库 jdbc驱动 第二步:写hibernate.cfg.xml文件如下,这里有连接数据库,设置数据库方言,注册类映射文件User.hbm.xml(后面会提到)   jdbc:m

bluekeyv的专栏 842

Springboot整合Hibernate拦截器EmptyInterceptor

Springboot整合Hibernate拦截器EmptyInterceptor

2017年 5628

Hibernate批量处理海量

最近一直常常看到别人javaeye网站上看到别人在问在hibernate怎么样处理海量数据,怎么样提高性能,本人在优快云博客上看到这篇好的文章,并结合本人一一验证 确实如作者所说 故拿出来和大家分享。希望对初学HIBERNATE框架的朋友有所帮助。  Hibernate批量处

雪禅子 4849

有关HIBERNATE

 有关HIBERNATE继承实现的三种策略 单表继承。每棵类继承树使用一个表(table per class hierarchy)  具体表继承。每个子类一个表(table per subclass)  类表继承。每个具体类一个表(table per concrete class)(有一些限制) 单表继承     双向关联  概念:双向关联允许通过关联的任一端访问另外一端。

summer的专栏 684

HIBERNATE是什么

无意中,一个朋友问我HIBERNATE是什么。这个问题让我很震惊。学了这么久。用了半年的HIBERNATE,对它就像自己的孩子。可是我连它的是什么我都不是很清楚。我能说HIBERNATE就是框架吗?这样也太让HIBERNATE默默无闻了。最起码框架这个词也太抽象了,讲给任何没接触过HIBERNATE的人,他们都不会理解。于是我去网上COPY了一份。希望大家好好理解。Hibernate是一个开放

chowqingbao1的专栏 1464

【HIbernate】hibernate 最简单的例子

做一个最简单的hibernate的例子 可以保存数据环境:      Myeclipse 6.5, hibernate3.2 1 先倒入数据驱动包和hibernate核心包 还有 要用到的相关包   所需包有如下:       hibernate目录下:          * hibernate3.jar   hibernate目录/lib/required目录下:      

水一方~! 4259

JAVA框架 / HIBERNATE / HIBERNATE系列教材 (一)- 基础 - HIBERNATE 基于实例的入门教程

JAVA 框架 / HIBERNATE / HIBERNATE系列教材 (一)- 基础 - HIBERNATE 基于实例的入门教程 #原文链接在这里 使用JDBC做数据库相关功能开发会做很多重复性的工作,比如创建连接,关闭连接,把字段逐一映射到属性中。 Hibernate把这一切都封装起来了,使得数据库访问变得轻松而简单,代码也更加容易维护。 第一次使用Hibernate会有一个比较多步骤的配置过...

weixin_44092440的博客 324

Java中的Hibernate是什么?如何使用Hibernate

总之,Transaction是Hibernate架构中非常重要的组件,它确保了Java应用程序与数据库之间的顺畅通信,并提供了许多其他有用的功能。总之,Session是Hibernate中非常重要的组件,它为开发人员提供了一种简单而强大的方式来管理Java应用程序与关系数据库之间的交互,并使得进行CRUD操作和数据检索变得更加容易和高效。总之,实体类应该是与Hibernate框架兼容的Java类,它应该定义数据库表中的列,并提供用于访问和操作这些列的方法。实体类应该包含与数据库表中的列对应的属性。

2301_77769537的博客 3668

hibernate hibernate4详解

表名和类名不同的情况时,对表名进行配置  1 在注解中  import javax.persistence.Table; @Table(name=”TableName”)  2 在XML文件中    配置对应的table属性为相应的表名      …        字段名和属性名相同,默认为  对于annotation,如果什么注解都不写的话,相当于加了注解@Basic  实

Code-lover's Learning Notes 1559

将Hibernate配置到Weblogic JNDI上的详细步骤

一、首先需要把Hibernate用到的jar包和配置文件都放到Weblogic能够搜索到的CLASSPATH路径上。单单这一步就有很多人很迷茫,其实去仔细看看Weblogic的启动脚本文件startWeblogic.cmd和startWLS.cmd,我想大部分人都知道该怎么配置了。我机器上的有个Hibernate的项目,在D:/test/oracle目录下,该目录下的结构是:D:/test/ora

KevinAAA的专栏 1862
上一篇: Websphere7.0环境下修改JVM的内存设置
下一篇: Spring-AOP,IOC,MVC,JMS,Hibernate
八阿哥别走
博客等级 码龄16年 8粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值