`
zengshaotao
  • 浏览: 791702 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate经典问题

 
阅读更多

1.Hibernate有哪几种查询数据的方式
         (1)导航对象图查询
      (2)OID查询
      (3)HQL
      (4)QBC
      (5)本地SQL

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


load加载方法:

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

get加载方法:

Java代码
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);  

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

而:

Java代码

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());  


上面这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、



5.   说下Hibernate的缓存机制

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

2.         二级缓存:

a)         应用及缓存

b)        分布式缓存

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

c)  第三方缓存的实现



6.   Hibernate的查询方式

Sql、Criteria,object comptosition

Hql:

1、  属性查询

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

3、  关联查询

4、  分页查询

5、  统计函数



7.   如何优化Hibernate?

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

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

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

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

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

6.         继承类使用显式多态

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

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


(1)一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)
A)表对应类
B)记录对应对象
C)表的字段对应类的属性
D)表之间的参考关系对应类之间的依赖关系

(2)以下关于SessionFactory的说法哪些正确?(多选)
A)对于每个数据库事务,应该创建一个SessionFactory对象
B)一个SessionFactory对象对应一个数据库存储源。
C)SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。
D)SessionFactory的load()方法用于加载持久化对象


(3)Customer类中有一个Set类型的orders属性,用来存放Order订单对象,在Customer.hbm.xml文件中,用哪个元素映射orders属性?
A)<set> B)<one-to-many> C)<many-to-one> D)<property>

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


(5)以下哪些属于Session的方法?
A)load()
B)save()
C)delete()
D)update()
E)open()
F)close()

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

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属性修改了两次:
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)在持久化层,对象分为哪些状态?(多选)
A)临时状态
B)独立状态
C)游离状态
D)持久化状态


(9)对于以下程序,Customer对象在第几行变为持久化状态?(单选)
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对象在第几行变为游离状态?(单选)
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)以下哪一种检索策略利用了外连结查询?(单选)
A)立即检索 B)延迟检索 C)迫切左外连结检索

(12)假设对Customer类的orders集合采用延迟检索策略,编译或运行以下程序,会出现什么情况(单选)
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,以下哪些说法正确?(多选)
A)HQL与SQL没什么差别
B)HQL面向对象,而SQL操纵关系数据库
C)在HQL与SQL中,都包含select,insert,update,delete语句
D)HQL仅用于查询数据,不支持insert,update和delete语句

(14)事务隔离级别是由谁实现的?(单选)
A)Java应用程序 B)Hibernate C)数据库系统 D)JDBC驱动程序

(15)悲观锁与乐观锁,哪个具有较好的并发性能?(单选)
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 经典例子全

    **标题:Hibernate经典例子全** **内容:** Hibernate是一款强大的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而无需过多关注底层的SQL语句。本资源包含了一系列的Hibernate实例,旨在...

    hibernate经典技术PPT

    "hibernate经典技术PPT"这一标题表明了资源的主要内容是关于Hibernate技术的,而“经典”一词暗示这是一份较为成熟和权威的教程资料,可能涵盖了Hibernate的核心技术和常见应用。 描述中的"经典heibernate教程,从...

    Spring+struts+hibernate经典注册

    在这个“Spring+Struts+Hibernate经典注册”项目中,我们将深入探讨这三个框架如何协同工作,实现一个完整的用户注册功能。 Spring框架是Java企业级应用的核心,它提供了依赖注入(DI)和面向切面编程(AOP)等核心...

    最经典的hibernate教程_从入门到精通(全四篇)

    1. Hibernate概述:了解ORM的概念,以及Hibernate如何解决传统JDBC编程中的问题。 2. 安装与配置:设置开发环境,包括下载Hibernate库,配置Hibernate的配置文件(hibernate.cfg.xml)。 3. 实体类与表映射:学习...

    经典hibernate教程_从入门到精通(第一篇,共四篇).ppt

    《经典Hibernate教程_从入门到精通》第一篇主要介绍了ORM概述和Hibernate的作用,以及Hibernate应用程序的基本结构和JDBC与Hibernate的对比。以下是详细的知识点解析: 1. **ORM概述** - ORM(Object-Relational ...

    Hibernate 经典总结

    【Hibernate 概述】 Hibernate 是一个流行的 ...面试时,除了了解 Hibernate 的基本概念和特点,面试官更希望听到你在实际项目中如何运用 Hibernate,以及遇到的问题和解决方案,体现出你的实践经验和问题解决能力。

    Struts Spring Hibernate经典书籍

    这本“Struts Spring Hibernate经典书籍”涵盖了这三个框架的重要概念、用法以及最佳实践,旨在帮助开发者深入理解并熟练运用它们。 Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它使得...

    精通hibernate3.0(第三版).rar

    8. 性能优化:分析和解决Hibernate性能问题,如缓存策略、批处理、连接池配置等,提升应用的运行效率。 9. 高级特性:探讨Hibernate的高级功能,如关联映射、集合映射、继承映射、多态查询、懒加载和代理对象等。 ...

    hibernate 经典课件,适合学习框架的人

    这个经典课件针对想要深入理解和掌握Hibernate框架的初学者和进阶者,旨在帮助他们从入门到精通。 一、Hibernate概述 Hibernate 是Java开发中最流行的ORM解决方案之一,它通过提供一套API和XML配置文件,将Java类与...

    Struts+hibernate经典的分页代码

    在这个"Struts+Hibernate经典的分页代码"示例中,我们可以学习如何在基于Struts的Web应用中集成Hibernate,以实现数据的分页显示。分页是用户界面设计中一个常见的需求,特别是在处理大量数据时,它能提高用户体验,...

    hibernate经典教程

    【hibernate经典教程】 本教程详细介绍了Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate是一个开源的ORM框架,旨在简化Java开发者与关系数据库之间的交互,通过提供对象到关系数据的映射,使得开发者...

    Java Persistence with Hibernate

    本文将基于《Java Persistence with Hibernate》这一经典著作,深入探讨Hibernate的核心概念和技术细节。 #### 书评摘要与概述 《Java Persistence with Hibernate》被誉为是Hibernate领域的权威指南。本书由项目...

    hibernate经典源码

    【hibernate经典源码】是针对Java开发人员的一个学习资源,主要涵盖了Hibernate框架的核心功能和常见用法。Hibernate是一个开源的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来...

    Hibernate Recipes

    《Hibernate Recipes》是一本专注于Hibernate框架的应用实践和技术解析的经典书籍。本书由Srinivas Guruzu和Gary Mak合著,于2010年出版。它以问题解决为导向,为开发者提供了大量的代码示例和模板,帮助他们在实际...

    Hibernate学习心得

    最后,`Struts+Hibernate整合.txt`提到了Struts,这是一个经典的MVC框架。Struts与Hibernate结合使用,可以构建强大的企业级Web应用。通过Action和Session Façade模式,我们可以将业务逻辑和数据访问层分离,使系统...

    hibernate_in_action 源码

    《Hibernate in Action》是一本经典的Java持久化框架Hibernate的实战指南。源码是作者为了配合书中的理论和示例而提供的实践素材,旨在帮助读者深入理解Hibernate的工作原理和使用方式。这里我们将围绕Hibernate的...

    HibernateSynchronizer3扩展JPA

    SSH框架组合是Java Web开发的经典架构,其中Spring负责依赖注入和事务管理,Struts处理MVC模式,而Hibernate则负责数据持久化。HibernateSynchronizer3的另一个亮点是其自动生成SSH各层代码的能力。这意味着开发者只...

    hibernate-3.0.zip

    总结,Hibernate 3.0作为经典的ORM框架,为Java开发者提供了强大的数据库操作支持。通过对源码的学习和实际项目的应用,我们可以更深入地理解ORM思想,提升开发技能,更好地应对复杂的企业级应用需求。

    hibernate-core

    SSH框架指的是Spring、Struts和Hibernate的组合,是Java Web开发中的经典三层架构模式。Spring负责管理应用的业务层,提供依赖注入和AOP(面向切面编程)等功能;Struts则作为表现层框架,处理HTTP请求和视图渲染;...

    hibernate 3.2.2

    《Hibernate 3.2.2:经典持久化框架的深度解析》 Hibernate 3.2.2是一款在Java开发领域广泛使用的对象关系映射(ORM)框架,它为开发者提供了强大的数据持久化功能,极大地简化了数据库操作。尽管最新版本已经更新...

Global site tag (gtag.js) - Google Analytics