Hibernate简答题

时间:2022-01-23 13:13:44

简单题目

1.持久化对象的三种状态,代表含义。

*状态(transient): 不曾进行持久化,未与任何Session相关联
持久化状态(persistent): 仅与一个Session相关联
游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联

(1)临时状态

使用new操作符初始化的对象不是立刻就持久化的。他们的状态是瞬时的,也就是说他们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其他对象所引用),他们的状态将会丢失,并由垃圾回收机制回收。

临时对象具有以下特征:

  • 第一不处于Session的缓存中,也可以说,不被任何一个Session实例关联。
  • 第二在数据库中没有对应的记录。

(2)持久化状态

持久实例是任何具有数据库标识的实例。它有持久化管理器Session统一管理,持久实例是在事务中进行操作的,他们的状态在事务结束时同数据库进行同步。

持久化对象具有几个特征:

  • 第一持久化对象总是被一个session关联。
  • 第二持久化对象与数据库中的记录对应。
  • 第三Session清理缓存的时候,会根据持久化对象的改变,更新数据库。

(3)游离状态

随着Session的关闭,曾经处于持久化状态的实例就变为游离状态。当然游离对象状态的引用依然有效,对象仍然可以被修改,如果让游离对象状态的实例重新转化为持久化状态,可以重新让该对象与某个Session关联,并且在游离状态过程中的修改也不会丢失。

2  hibernate中Session的find()方法以及Query接口的区别

Session类的find()方法以及Query接口都支持HQL检索方式。这两者的区别在于,前者只是执行一些简单HQL查询语句的便捷方法,它不具有动态绑定参数的功能,而且在Hibernate3.2版本中,已经淘汰了find()方法;而Query接口才是真正的HQL查询接口,它提供了以上列出的各种查询功能。

3  hibernate中session的清理和清空有什么区别?

(1)Session可以按照缓存中对象的变化来执行数据库相关的SQL语句,来同步数据库,这个过程就叫做Session清理缓存。

(2)清空是session清除部分或全部对象或者session关闭;当调用session.evict(customer); 或者session.clear(); 或者session.close()方法时,Session的缓存被清空。

4  请简述hibernate中Session的特点有哪些?

(1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
(2)Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
(3)在Session 中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。

5  
叙述hibernate中Session的缓存的作用

  • 第一减少访问数据库的频率。因为应用程序从缓存中读取数据比直接从数据库中读取数据速度要快的多。所以Session的缓存可以起到提高数据访问性能的作用。
  • 第二保证缓存中的相关对象与数据库中的相关记录同步,位于缓存中的对象称为持久化对象。
  • 第三当缓存中的持久化对象之间存在关联时,Session 保证不出现对象图的死锁。

6  请简述Hibernate与jdbc的联系

Hibernate是jdbc的轻量级封装,包括jdbc的与数据库的连接(用hibernate的配置文件实现,本质是封装了jdbc),和查询,删除等代码,都用面向对象的思想用代码联系起来,Hibernate通过hbm 配置文件(或注解)把持久化类的字段和数据库的字段关联起来比如数据库的id。

HQL语句也是面向对象的,它的查询语句不是查询数据库而是查询类的。

7  请简述Hibernate是如何实现分页的?如果不使用Hibernate提供的方法实现分页功能,则采用什么方式分页?

(1)hibernate自带的分页机制:获得Session对象后从Session中获得Query对象。

用Query.setFirstResult()设置要显示的第一行数据,

Query.setMaxResults()设置要显示的最后一行数据。

(2)不使用hibernate自带的分页,可采用sql语句分页

如5:为每页显示的记录,2为当前页 select * top 5 from
table where tabId not in (select tabId top (2-1)*5 from table);

8  Hibernate工作流程

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

9  Hibernate是如何实现延迟加载的?

Hibernate2延迟加载实现a)实体对象 b)集合Collection

Hibernate3 提供了属性的延迟加载功能

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

10  Hibernate的三种查询方式,并简述使用方式

(1)HQL的检索方式

Hibernate Query Language  -- Hibernate的查询语言

(2)QBC的检索方式

Query By Criteria -- 条件查询

(3)SQL检索方式

本地的SQL检索

11   hibernate中get和load区别;

(1).查找不到对象时处理方式不同:get返回null,load返回异常

(2). load返回的是代理对象,等到真正用到对象的内容时才发出sql语句(懒加载模式)get不支持延迟加载。

12   hibernate中session.commit 和flush区别

(1)flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来   所谓清理,是指Hibernate 按照持久化象的状态来同步更新数据库

(2)Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了.

(3)commit针对事物的,flush针对缓存的, 数据同步到数据库中后只要没有commit还是可以rollback的。

13   写出5个hibernate主键生成 策略

1) assigned
主键由外部程序负责生成,无需Hibernate参与。
2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。
3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。
5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。
6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce中的Sequence。
7) native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。
8) uuid.hex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。
10) foreign
使用外部表的字段作为主键。一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。

14   hibernate中update和saveOrUpdate的区别

update()和saveOrUpdate()是用来对跨Session的PO进行状态管理的。

update()方法操作的对象必须是持久化了的对象。也就是说如果此对象在数据库中不存在的话就不能使用update()方法。

saveOrUpdate()方法操作的对象既可以使持久化了的也可以使没有持久化的对象。如果是持久化了的对象调用saveOrUpdate()则会 更新数据库中的对象如果是未持久化的对象使用此方法,则save到数据库中。

15   如何在控制台看到hibernate生成并执行的sql

在定义数据库和数据库属性的文件applicationConfig.xml里面,把hibernate.show_sql 设置为true,这样生成的SQL就会在控制台出现了
注意:这样做会加重系统的负担,不利于性能调优

16   hibernate中Detached Object有什么好处

Detached Object(游离对象)可以传递到任何层直到表现层而不是用任何DTO(Data Transfer Objects). 然后你还可以重新把游离对象赋给另外一个Session.

17   什么是SessionFactory,它是线程安全么

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。是线程安全的

18   Hibernate的五个核心接口并简述其作用

  • Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。
  • SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。
  • Session接口:负责保存、更新、删除、加载和查询对象。
  • Transaction接口:管理事务。
  • Query和Criteria接口:执行数据库查询。

19   hibernate的Session是什么?两个线程能共享同一个session吗

hibernate中的session是一级缓存,可以理解为进程级的缓存。在进程运行期间一直存在。Hibernat对数据库的操作是通过Session来实现的,这里的session不同于页面间传递参数的session,而是类似于JDBC中的Connection。Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与session息息相关。
 

不能共享,因为session是线程不安全的

20   Hibernate 的检索方式有哪些 ?

(1)导航对象图检索方式。(根据已经加载的对象,导航到其他对象。)

(2)OID检索方式。(按照对象的OID来检索对象。)

(3)HQL检索方式。(使用面向对象的HQL查询语言。)

(4)QBC检索方式。(使用QBC(Qurey By Criteria) API来检索对象。)

(5)本地SQL检索方式。(使用本地数据库的SQL查询语句。)

Hibernate简答题的更多相关文章

  1. 他答对一半(打一字)asp.net开源简答题项目

    先出个字谜: 他答对一半(打一字) 你猜出来了没? 可以到这个网址答题:http://m.hovertree.com/miyu/bjae/4fpmm2td.htm 看你的答案是否正确. 这是ASP.N ...

  2. 《web前端设计基础——HTML5、CSS3、JavaScript》 张树明版 简答题简单整理

    web前端设计基础——HTML5.CSS3.JavaScript 简答题整理 第一章 (1)解释一下名词的含义:IP地址.URL.域名   iP定义了如何连入因特网,以及数据如何在主机间传输的标准. ...

  3. 『Python题库 - 简答题』 Python中的基本概念 (121道)

    ## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...

  4. 面试java简答题

    1.  sleep() 和 wait() 有什么区别? 答:1.这两个方法来自不同的类分别是Thread和Object      2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他 ...

  5. 加深Java基础,做了20道题选择题!简答题没做

    2015-03-16 17:13 269人阅读 评论(1) 收藏 举报  分类: 笔试(1)  版权声明:本文为博主原创文章,未经博主允许不得转载.    1,下列说法正确的是( A ) A )Jav ...

  6. OS——进程简答题(1)

    1,叙述进程和程序的主要区别. 解:进程和程序是两个既有联系又有区别的两个概念,它们的主要区别如下: (1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念.而进程是程序在处理机上的 ...

  7. javaEE简答题整理

    1. 什么是JavaEE?其编程思想是什么? JavaEE是一个标准的中间件体系结构,是企业分布式应用开发标准.JavaEE的编程思想是组件—容器. 2. 为什么提出JavaEE体系结构? (1)为满 ...

  8. JAVA常见简答题

    一.基础知识 1.简述使用文本编辑器和 JDK 创建并运行 Java 应用程序的基本步骤. 答:①打开文本编辑器输入 Java 源程序: ②保存文件,文件名为源程序中 public 修饰类的类名,扩展 ...

  9. 考研计算机复试笔试(数据结构/C语言简答题篇)

    1.比较顺序存储结构和链式存储结构的优缺点,什么情况下链表比顺序表好? 顺序存储时相邻元素的存储单元的地址也相连,可以随机存取.优点是存储密度大,空间利用率高:缺点是插入或删除时不方便. 链式存储时相 ...

随机推荐

  1. JSON 字符串中的中括号和大括号区别详解

    json 变量有两种可能, 可能是一个对象, (类似 类的实例), 也可能是一个数组!! 主要是要 从 ""语义" 上来分析, 到底该用 大括号还是用中括号: 如果从语义 ...

  2. 拦截PHP各种异常和错误,发生致命错误时进行报警,万事防患于未然

    在日常开发中,大多数人的做法是在开发环境时开启调试模式,在产品环境关闭调试模式.在开发的时候可以查看各种错误.异常,但是在线上就把错误显示的关闭. 上面的情形看似很科学,有人解释为这样很安全,别人看不 ...

  3. DevExpress中使用DocumentManager,并确保不重复

    https://www.devexpress.com/Support/Center/Question/Details/Q411356 void ActivatForm(Type someType) { ...

  4. ionic 图片轮播问题

    1.使用ion-slide可以实现图片轮播,但是如果在html中仅仅增加ion-slide是远远不够的,会出现两个问题: (注:使用的是angularjs.首先需要在,js文件中注入:$ionicSl ...

  5. “-="的陷阱

    1.有如下代码(显示下拉框时,屏幕最大化右键菜单的显示坐标处理): 起初: Rectangle rect = System.Windows.Forms.SystemInformation.Virtua ...

  6. sql解析xml

    我们有时候需要在sql中解析xml,xml解析sql实例如下:  DECLARE @params xml  DECLARE @customparams xml = null  -- 0.解析输入参数 ...

  7. Bootstrap3 栅格系统-列偏移

    使用 .col-md-offset-* 类可以将列向右侧偏移.这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距(margin).例如,.col-md-offset-4 类将 .col-md- ...

  8. Zipkin和Brave实现http服务调用的跟踪

    使用Zipkin和Brave实现http服务调用的跟踪,Brave 是用来装备Java程序的类库,提供了面向标准Servlet.Spring MVC.Http Client.JAX RS.Jersey ...

  9. tornado-cookies+pycket 验证

    1.pip install pycket pip install redis 2.config settings = dict( debug=True, template_path='template ...

  10. HDU 4737 A Bit Fun (2013成都网络赛)

    A Bit Fun Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...