`

常见hibernate面试题(转载)

    博客分类:
  • j2ee
阅读更多
1.Hibernate有哪几种查询数据的方式

(1)导航对象图查询

(2)OID查询

(3)HQL

(4)QBC

(5)本地SQL

2.load()和get()的区别


load加载方法:

Java代码

Users user = (Users)session.load(Users.class, userId);

Users user = (Users)session.load(Users.class, userId);

get加载方法:

Java代码

Users user = (Users)session.get(Users.class, userId);

Users user = (Users)session.get(Users.class, userId);


两加载方法区别:

区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个 null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出 异常:org.hibernate.ObjectNotFoundException;

区别2:load支持延迟加载,get不支持延迟加载。

也就是说:

Java代码

Users user = (Users)session.load(Users.class, userId);

Users user = (Users)session.load(Users.class, userId);

这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。

而:

Java代码

Users user = (Users)session.get(Users.class, userId);

Users user = (Users)session.get(Users.class, userId);

则立即去执行数据库查询。 所以Users user = (Users)session.load(Users.class, userId);不会执行任何sql。

注意:

Java代码

Users user = (Users)session.load(Users.class, userId);
System.out.println(user.getId());

Users user = (Users)session.load(Users.class, userId);

System.out.println(user.getId());

上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里 存放一个map对象,该map的key就是userId的值,但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所 以不会报任何错。不会执行任何数据库操作。


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

原理:

1. 读取并解析配置文件

2. 读取并解析映射信息,创建SessionFactory

3. 打开Sesssion

4. 创建事务Transation

5. 持久化操作

6. 提交事务

7. 关闭Session

8. 关闭SesstionFactory


为什么要用:


1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。


4. Hibernate是如何延迟加载?

1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)

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

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

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

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、


6. 说下Hibernate的缓存机制

1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存

2. 二级缓存:

a) 应用及缓存

b) 分布式缓存

条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据

c) 第三方缓存的实现


7. Hibernate的查询方式

Sql、Criteria,object comptosition

Hql:

1、 属性查询

2、 参数查询、命名参数查询

3、 关联查询

4、 分页查询

5、 统计函数


8. 如何优化Hibernate?

1. 使用双向一对多关联,不使用单向一对多

2. 灵活使用单向一对多关联

3. 不用一对一,用多对一取代

4. 配置对象缓存,不使用集合缓存

5. 一对多集合使用Bag,多对多集合使用Set

6. 继承类使用显式多态

7. 表字段要少,表关联不要怕多,有二级缓存撑腰

=====================Hibernate笔试题==========================

(1)一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)ABC

A)表对应类

B)记录对应对象

C)表的字段对应类的属性

D)表之间的参考关系对应类之间的依赖关系

(2)以下关于SessionFactory的说法哪些正确?(多选)BC

A)对于每个数据库事务,应该创建一个SessionFactory对象

B)一个SessionFactory对象对应一个数据库存储源。

C)SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。

D)SessionFactory的load()方法用于加载持久化对象

(3)Customer类中有一个Set类型的orders属性,用来存放Order订单对象,在Customer.hbm.xml文件中,用哪个元素映射orders属性?A

A)<set> B)<one-to-many> C)<many-to-one> D)<property>

(4)<set>元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)D

A)none

B)save

C)delete

D)save-update

(5)以下哪些属于Session的方法?ABCDEF

A)load()

B)save()

C)delete()

D)update()

E)open()

F)close()

(6)以下程序的打印结果是什么?(单选)C

tx = session.beginTransaction();

Customer c1=(Customer)session.load(Customer.class,new Long(1));

Customer c2=(Customer)session.load(Customer.class,new Long(1));

System.out.println(c1==c2);

tx.commit();

session.close();

A)运行出错,抛出异常

B)打印false

C)打印true

(7)以下程序代码对Customer的name属性修改了两次:B

tx = session.beginTransaction();

Customer customer=(Customer)session.load(Customer.class,

new Long(1));

customer.setName(\"Jack\");

customer.setName(\"Mike\");

tx.commit();

执行以上程序,Hibernate需要向数据库提交几条update语句?(单选)

A)0 B)1 C)2 D)3

(8)在持久化层,对象分为哪些状态?(多选)ACD

A)临时状态

B)独立状态

C)游离状态

D)持久化状态

(9)对于以下程序,Customer对象在第几行变为持久化状态?(单选)D

Customer customer=new Customer(); //line1

customer.setName(\"Tom\"); //line2

Session session1=sessionFactory.openSession(); //line3

Transaction tx1 = session1.beginTransaction(); //line4

session1.save(customer); //line4

tx1.commit(); //line5

session1.close(); //line6

A) line1 B)line2 C)line3 D)line4 E)line5 F)line6

(10)对于以下程序,Customer对象在第几行变为游离状态?(单选)F

Customer customer=new Customer(); //line1

customer.setName(\"Tom\"); //line2

Session session1=sessionFactory.openSession(); //line3

Transaction tx1 = session1.beginTransaction(); //line4

session1.save(customer); //line4

tx1.commit(); //line5

session1.close(); //line6

A) line1 B)line2 C)line3 D)line4 E)line5 F)line6

(11)以下哪一种检索策略利用了外连结查询?(单选)C

A)立即检索 B)延迟检索 C)迫切左外连结检索

(12)假设对Customer类的orders集合采用延迟检索策略,编译或运行以下程序,会出现什么情况(单选)C

Session session=sessionFactory.openSession();

tx = session.beginTransaction();

Customer customer=(Customer)session.get(Customer.class,new Long(1));

tx.commit();

session.close();

Iterator orderIterator=customer.getOrders().iterator();

A)编译出错 B)编译通过,并正常运行 C)编译通过,但运行时抛出异常

(13)关于HQL与SQL,以下哪些说法正确?(多选)BD

A)HQL与SQL没什么差别

B)HQL面向对象,而SQL操纵关系数据库

C)在HQL与SQL中,都包含select,insert,update,delete语句

D)HQL仅用于查询数据,不支持insert,update和delete语句

(14)事务隔离级别是由谁实现的?(单选)C

A)Java应用程序 B)Hibernate C)数据库系统 D)JDBC驱动程序

(15)悲观锁与乐观锁,哪个具有较好的并发性能?(单选)B

A)悲观锁 B)乐观锁

答案:

(1)A,B,C (2)B,C (3)A (4)D (5)A,B,C,D,F (6)C (7)B (8)A,C,D (9)D (10)F (11)C (12)C (13)B,D (14)C (15)B
分享到:
评论

相关推荐

    常见hibernate面试题.doc

    ### 常见Hibernate面试题知识点详解 #### 1. Hibernate查询数据的方式 - **导航对象图查询**:这是最基本的查询方式之一,适用于查询对象之间的关联关系。通过已知对象来导航到其他对象,比如通过一个`User`对象...

    Hibernate面试题部分汇总集合

    Hibernate面试题部分汇总集合Hibernate面试题部分汇总集合

    hibernate面试题2

    【hibernate面试题2】涉及了许多关于Hibernate框架的核心知识点,包括检索策略、SQL日志显示、缓存策略以及Hibernate与其他技术(如Spring和Struts)的整合。下面将逐一详细解析这些概念。 1. **Hibernate检索策略*...

    Hibernate常见面试题

    这些知识点涵盖了常见的面试问题,可以帮助准备面试或深入理解Hibernate技术的人士更好地掌握该领域的内容。 ### Hibernate的检索方式 1. **导航对象图检索**:通过已加载的对象来访问与其关联的对象,这种检索...

    Hibernate面试题专栏 - 最全的Hibernate面试题, Hibernate笔试题, Hibernate问题

    【标题】与【描述】提及的是“Hibernate面试题专栏”,主要涵盖了全面的Hibernate面试题、笔试题以及相关问题,这表明我们将要讨论的是Java领域中著名的对象关系映射框架——Hibernate的相关知识。Hibernate是一个...

    Hibernate常见面试题汇总

    【Hibernate常见面试题汇总】 1. **数据库查询优化** - **建立索引**:索引可以大大提高查询速度,特别是针对频繁查询的列。 - **减少表间关联**:尽量减少JOIN操作,多表查询可能导致性能下降。 - **优化SQL**...

    常见hibernate面试题

    【Hibernate 框架面试详解】 1. **Hibernate 查询数据的方式** - 导航对象图查询:通过对象之间的关联关系直接获取数据。 - OID 查询:基于对象标识符(Object Identifier)查找对象。 - HQL(Hibernate Query ...

    hibernate面试题总结

    Hibernate是Java领域中一款流行的持久...以上就是Hibernate面试中常见的问题和答案,涵盖了基本概念、缓存策略、查询方式以及事务和数据访问等方面的知识点。理解并掌握这些内容对于深入学习和使用Hibernate至关重要。

    hibernate面试题.doc

    【知识点详解】 ...综上所述,Hibernate是一个强大的ORM框架,能够有效地处理对象与数据库之间的映射,优化查询性能,以及管理对象的状态。理解和熟练运用这些知识点对于开发基于Java的数据库应用程序至关重要。

    Hibernate面试题-详尽解析

    ### Hibernate面试题详解 #### 一、主键生成方式中的`native`与`identity`区别 **1.1 native方式** - **定义**: `native`是一种动态选择标识符生成策略的方式,它根据所使用的底层数据库系统自动选择最适合的生成...

    hibernate面试题及答案

    ### Hibernate框架概述 #### 1. Hibernate框架定义与特点 - **定义**:Hibernate是一个开源的对象关系映射(ORM)框架,它为Java应用程序提供了一种简单高效的方式来处理数据库交互。通过将Java对象与数据库表建立...

    ( [尚硅谷]_佟刚_Hibernate面试题分析.zip

    【标题】:“尚硅谷_佟刚_Hibernate面试题分析” 【描述】提到的资源是针对Hibernate框架的一份面试题分析资料,由尚硅谷教育机构的讲师佟刚提供。该资源可能包含了对Hibernate在实际开发中常见问题的解答,以及...

    java面试题,J2EE面试题 笔试题

    6、java常见面试题 7、java程序员面试宝典 8、java面试题及答案 9、java面试题编程篇 10、Oracle面试题 11、Oracle企业面试题集锦 12、Spring面试题 13、SSH面试题 14、Strut+Spring+Hibernate面试题 15、张孝祥整理...

    Hibernate面试题分析_尚硅谷_佟刚

    1. Hibernate 的检索方式有哪些 ? 2. 在 Hibernate 中 Java 对象的状态有哪些 ? 3. Session的清理和清空有什么区别? 4. load()和get()的区别 5. hibernate 优缺点......

    Hibernate面试题分析.zip

    《Hibernate面试题分析》 在Java开发领域,Hibernate作为一个强大的对象关系映射(ORM)框架,始终占据着举足轻重的地位。对于求职者来说,掌握Hibernate的基本概念、使用技巧以及常见问题的解决方法,是面试中必不...

    Hibernate面试题分析_大数据测试面试题

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以...

    Hibernate大总结/Hibernate面试题大全

    ### Hibernate核心概念与面试知识点详解 #### 一、持久化概念 **持久化**是软件开发中的基础概念之一,指的是将程序数据存储到可以长期保存的存储设备中,如硬盘等,以便数据能够超越程序的生命期而存在。简单来说...

Global site tag (gtag.js) - Google Analytics