- 浏览: 283987 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
u011563440:
u011563440 写道用反射A.class.toGener ...
Java接口中的内部接口和接口中的内部类 -
u011563440:
用反射A.class.toGenericString()--- ...
Java接口中的内部接口和接口中的内部类 -
narutolby:
因为接口本身不能实例化,所以在new 一个 接口的内部类时默认 ...
Java接口中的内部接口和接口中的内部类 -
hekuilove:
请问楼主,第四部如何做?在eclipse哪个位置?
eclipse中使用maven插件的问题:Updating index central|http://repo1.maven.org/maven2 -
小小生:
请问下,如果修改了数据库里面的订单任务的时间,那么不是要重启? ...
利用Spring动态对Quartz定时任务管理
Hibernate3主要的新特性包括:
1:实现了EJB3风格的持久化操作。在原有的saveOrUpdate()和saveOrUpdateCopy()两个方法之外,又提供了EJB3风格的create()和merge()两个操作。
2:提供更强的映射灵活性。允许将一个类映射到多张表,允许混合使用“每个继承体系一张表”和“每个子类一张表”的映射策略,等等。
3:支持存储过程和手写SQL,并且可以用手写SQL替代Hibernate自动生成的SQL语句。
4:基于AST(抽象语法树)的HQL解析。
5:字段级的懒式获取。每个属性都可以在映射描述符中声明“lazy=true”,这样声明的属性会到真正使用时才从数据库加载。不过,实现这项功能需要首先在编译期对字节码进行增强。
Hibernate高官谈Hibernate3.2新特性
文章来源于http://www.lupaworld.com
Steve Ebersole是JBoss公司的首席软件工程师,他与1977年出生的法国人Emmanuel Bernard一起领导着Hibernate项目。随着Hibernate 3.2发布后,记者对Ebersole进行了专访,这位Hibernate项目的领导人谈了Hibernate 3.2的新功能,以及对EJB 3持久化框架的支持,还有即将推出的Hibernate功能。
Frank SommerSteve Ebersole是artima网站的高级编辑,为了能让大家好的了解访谈的内容,我们IT168技术频道特翻译此文与各位读者一起分享,看看Steve Ebersole在这次访谈中都说了什么?
新工具的特性
Frank SommerSteve Ebersole:从最初的只有Hibernate Core,发展到现在的除了Hibernate Core外,还有Hibernate Annotation、Hibernate EntityManager和Hibernate Tools等众多工具。您能给我们简单介绍一下这些工具的情况,以及它们之间存在什么样的联系吗?在Hibernate 3.2中,这些工具有什么新的内容吗?
Steve Ebersole:正如以前一样,Hibernate Core可是说人们通常说的Hibernate,它提供了具备完整功能、以及优秀性能的对象持久性映射(ORM)即持久层映射核心。Hibernate可以帮助开发者节省持久层编码时间,有助于面向对象的设计。Hibernate Core需要JDK1.3 以上或者支持J2EE 1.4、Java EE 5.0的应用服务器,其他软件包建立Hibernate Core核心提供的功能之上。
Hibernate Annotation提供了JDK 5.0 代码标注的功能,从而替代XML元数据,通过使用Hibernate Annotation,能够减少描述符,编译期校验,以及减少配置和维护工作等。它们提供了其他XML元数据,提供了在XML元数据中不存在的一些功能,诸如Lucene和Validator等等。
Hibernate EntityManager和Hibernte Annotation的一部分共同实现了Java 持久化编程接口,对象生命周期法则,以及JSR 220(也就是EJB 3.0)定义的查询选项。
JPA的支持情况
Frank SommerSteve Ebersole:从一个开发者的角度来看,除了JPA是一个Java标准外,直接使用Hibernate,或者把Hibernate作为一个JPA持久提供者(persistence provider)来使用,这两者之间的主要区别是什么?
Steve Ebersole:从一个开发者的角度,我们应该需要讨论一下应用程序接口(API)设置。在基础应用程序接口(API)操作方面,这两者几乎没有什么不同。
例如,EntiyManager和Hibernate Session都提供名为merge()的方法,并且定义了完全相同的行为,这种情况还有很多。主要的应用程序接口区别在于访问Hibernate的高级功能,这在JPA中是没有定义的。
例如,Hibernate中定义了一个方法,允许开发者管理持久化上下文的大小。这是一个非常重要的功能,尤其是当我们需要存在长时间的扩展,并且持续增长的持久化上下文的大小的时候。
而且,一般来说,JPA为每一种类型的操作定义一个语义。假如我有一个描述分离状态的实体,在JPA中,我需要利用merge()或lock()来重新关联状态,但是,Hibernate提供merge()、lock()、update()、saveorupdate()、saveorupdatecopy()或者replicate()等方法来取代JPA中的重新关联状态,两者中所有处于分离状态的操作具有细微的语义区别。
Frank SommerSteve Ebersole:除了在管理分离对象的语义方面的区别,还有其他Hibernate功能目前在JPA中不支持吗?或者有JPA功能目前在Hibernate中不被支持吗?
Steve Ebersole:Hibernate完全实现了JPA规范,包括所有可选的行为。至于JPA中不具备的Hibernate的功能,实际上还是有一些的, Query-by-Criteria/Query-by-Example可能是最大的缺少的功能。
还有一个我刚才提到的,控制一个持久化上下文中管理状态的大小,是另一个Hibernate支持的功能,但是在JPA中没有被规范来定义它;还有定义任何类的缓存语义的共享状态功能在JPA中也根本没有。
同样,Hibernate具有一套非常强大和灵活的类型系统,而JPA只定义了一小部分的对象类型转化库。
HIbernate强大的功能
Frank SommerSteve Ebersole:Annotations是一个非常方便的功能,用来详细说明持久层相关的功能。那么有没有情况会让你推荐开发者使用XML映射文件呢?
Steve Ebersole:首先,我想指出这不是一个非此即彼的选择题。用户可以混合和搭配使用代码标注(annotations)和XML映射功能。不过,有两种情况,用户需要使用XML。
第一种情况是,用户在使用“实体名称”的时候,这个功能可以让你能够同时映射一个给定的POJO类到多个实体名称。这对于代码标注(annotations)是不可能的,因此你需要使用XML映射实体之一来实现。
第二种情况是,用户在使用Hibernate的“实体模式”功能的时候。这同样对代码标注(annotations)是不可能的,因为它假定你正在使用POJO。
Hibernate的实体模式的思想是能够以不同方式描述你的域模型。例如,Hibernate支持一个DOM4J实体模式。当你使用DOM4J实体模式的时候,请求Hibernate来为你从数据库中取出一些东西,你所取回的是一个org.dom4j.Element,POJO就是Hibernate的另一种实体模式。
除了实体名称和实体模式外,就完全依靠个人喜好了。
Frank SommerSteve Ebersole:说到代码标注(annotations),那么在Hibernate Annotations和在JPA规范中规定的持久性相关的代码标注(annotations)之间,有什么区别?
Steve Ebersole:区别就是范围大小的问题,JPA通常借助于它的代码标注(annotations)来定义对象/相关性映射架构的一个子集,它定义了一个人想要实现对象持久化的最小的映射架构。
但是,Hibernate Annotations反映了强大的Hibernate功能,例如批量抓取、精选抓取、联合子集映射、类型映射、缓存语义映射等等,这是JPA所不具备的。加上我已经提到的,Hibernate Annotations还包含超出Hibernate Core所能提供的强大的行为。
Frank SommerSteve Ebersole:能透露一点关于与Lucene整合的情况吗?
Steve Ebersole:这个工作是由Emmanuel Bernard领导的,它建立在Hibernate Annotations和Hibernate Core的事件框架之上,其指导思想是托管基于域实体状态的Lucene目录的维护给基于持久性事件的Hibernate。
一旦你更新或删除或插入一个新的实体,Hibernate根据这些操作来启动事件,这样Lucene综合监听器开始执行任何所需要的对Lucene目录的动作。整个计划的漂亮之处是解决方案的简单性:你可以从你的域类的一些注解和Hibernate配置的一些额外的内容中得到全部功能。
Frank SommerSteve Ebersole:你计划在下一个版本的Hibernate中增加什么有有趣的功能?
Steve Ebersole:我正在研究更多的新的HQL功能,例如ad-hoc联合语法和UNION/MINUS查询。
我还在重新研究如何让Hibernate本身与JDBC对话,我们会根据试验结果来决定是不是对消费者用户提供这个功能,作为靠Hibernate会话来访问JDBC的一种可行的选择。
我仍然继续扩展实体模式的功能,在使其更加易用的同时,增加新的标准模式。
Hibernate Lucene和Hibernate Validatator方面,我们也将继续增加功能设置。
宣扬写sql语句,它将sql语句放进一个单独的xml文件,这种方式赢得了很多开发者的喜爱,一句话,方便维护。但hibernate同样具有这种功能,而且比ibatis更加强大。Hibernate的命名查询/命名参数查询,就是将hql语句放在一个单独的xml文件之中,它仍然让人们以面向对象的方式去操纵数据,这得到大量遵循oo方式开发者的喜爱,而不用在以oo的方式写着代码的同时,然后再转变思维,用面向关系的方式去写那些sql语句。但hibernate不仅做了这些,它的native sql查询方式,完全满足sql语句的偏爱者,它原文地址:
http://www.blogjava.net/Werther/archive/2009/06/18/283091.html
Hibernate在解决性能问题方面做得非常好。有了它的缓存机制,使用第三方缓存和数据库连接池,就较好的解决的性能问题。但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问题。
学习了一段时间的ibatis,我觉得hibernate有着ibatis无法替代的优势。
1、开发者都知道,hibernate让我们以oo的方式操作数据库,这让我们看到了hibernate的强大之处,体验到操作数据的方便。但Gavin King说,hibernate最耀眼之处是hibernate的缓存机制,而不是以oo的方式操作数据库。Hibernate的缓存机制不外乎是一级缓存session,二级缓存sessionFactory,和第三方缓存如ehcache.也就是hibernate的最强大的地方是它的缓存,理解了这个才能真正的理解hibernate.缓存实在太难了,我至今未能真正理解。
2、可维护性:ibatis像ibatis一样,将sql语句放在配置文件之中。
3、性能:我坚信,hibernate性能问题不是问题。想想那么多大中小项目都在使用hibernate,你还怀疑hibernate的性能吗?spring整合hibernate之后,在真正性能瓶颈的地方,完全可以使用spring集成的jdbc,或直接写存储过程得了。但首先得确认,这实在是性能瓶颈的地方,我想,不应想当然的认为性能的问题,所谓的性能问题阻挠了很多人。
我认为,性能的好坏无外是发送sql语句的多少而已。性能好,发送的sql语句少,性能差,就是发送大量的sql语句。Hibernate在解决性能问题方面做得非常好。
有了它的缓存机制,使用第三方缓存和数据库连接池,就较好的解决的性能问题。
但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问题。
我认为开发者可以在以下几个方面自行调优:
a、在查询字符串中,应该总是使用jdbc的占位符?,或使用使用命名参数:,不要自查询中使用字符串值来代替非常量值。
b、Flush会影响性能,频繁刷新影响性能,尽量减少不必要的刷新。
c、Cascade策略,在几对几的关系,正确设置cascade策略,想清楚在操作对象A的同时是否需要级联操作对象B,比如在one to many的父子关系中,删除了父亲one,需级联删除子many,这时的one这端可设置cascade = “delete”,这样在删除one时,会自动删除子,但对子的操作不会影响父。Cascade还有其他的属性值,只要设置正确,可提升性能。
d、lazy策略,正确设置延迟加载策略同样会提升性能,在one to many或many to many中,通常总应该延迟加载many的一方的到内存。设置了lazy = “true”,首先发送sql语句,加载自己到内存,到需要时才加载级联对象;lazy=“false”,则会同时加载自己和级联对象到内存。
e、另外还有集合的性能(set、list、map、array),都应正确设置。
f、正确使用第三方缓存,在读操作频繁写操作不多的情况,使用第三方缓存可大幅度提升性能,如ehcache的缓存策略有:read-only,read-write和notstrict-read-write.
f、 随着hibernate新版本的发布,和技术的发展,我相信hibernate的性能会越来越好,所有性能不是不使用hibernate的原因。
4、hibernate不仅仅作为持久层的orm框架存在,它除了dao层的持久化操作外,还有很多。
在注解annotation已经走向主流的今天,hibernate 迅速响应,让xml部署描述符成为可选的。Hibernate annotation 对大字段的处理只是一个@Lob就搞定了。
hibernate search对Lucene进行了轻量级的封装,全文检索变得非常简单。
Hibernate validator被认为是最合理的验证方式,将验证策略直接附在贯穿各层的领域模型domain上,不再需要哪些web框架的xml方式的验证,代码中不再出现大量的非空/null的判断。
5、jbpm, Jbpm业务流程引擎的持久层采用hibenrnate来实现,要想使用jbpm,hibernate是必须的。我想,业务流程管理无比重要,在soa迅速发展的今天,如果实施soa项目,业务流程管理是必然和必须的。因为soa就是业务和it技术的融合,是业务流程管理和it基础架构的融合。在soa中,业务管理是第一位的,这需要相应的技术来实现该业务流程管理。开源领域的jbpm我想会是首选。所以,为了将来有可能实施soa项目,为了实现soa的业务流程管理,应该使用hibernate.
6、大家都知道,hibernate将ejb2时代的实体bean赶进了历史,而ejb3的jpa标准也只不过是hibernate的子集而已。jsr规范请求的威力是巨大的,没有各种jsr规范请求,就不会有各种应用程序框架,各种应用程序框架只是那些jsr规范请求的实现者。jpa作为持久层的规范标准,引导持久层orm框架的方向,jpa同样以面向对象的方式操作数据库,而不是写sql语句。规范标准都完全orm,不写sql了,你还有理由不跟着它吗?
7、Spring+hibernate+范型+可变参数,这是一个非常强大的组合,对应普通的crud操作,你不再需要重复写那些烦人的相似的dao层和manager层的代码,仅仅需要写一次,就完成了所有大量的crud操作。Ibatis尽管也支持范型,但始终没有hibernate支持的好
8、Jboss,hibernate是jboss的项目,jboss的所有项目的持久层都采用的hibernate,要知道,jsr规范组的专家们大多数是来自jboss的,在一定程度上说,jboo引领着java的发展方向。使用hibernate,跟着jboss,不偏离java的发展方向。
9、Gavin King,我最崇拜的偶像,他不仅发明了强大的hibernate,还搞出了同样强大且优雅的web2.0应用程序框架seam.他是ejb3.0专家组成员之一,是jpa规范请求的领导者,他java领域最有发言权、最权威的领袖人物之一。现在,他领导web bean的,jsr299的发展,web bean规范的制定,全球软件巨头如ibm、oracle、bea和apache没有一个反对,纷纷响应。Web bean,想象起来,实在太美好了,完全的松耦合和强类型,所有的应用组件生活在一个应用组件上下文context中,相互合作。那时将不再有各种各样的上下文环境,不再有struts2的ActionContext,不再有spring的ApplicationContext,不再有hibernate的session,不再有持久化上下文,不再有事务上下文,不再有安全上下文,所有组件生活在一个大家庭中,大家其乐融融,实现天下的大和平。
10、 osgi,我认为现在最值得学习的一个技术,有了osgi,实现真正的多模块开发,改变传统的开发方式。现在,已经有了hibernate osgi,spring dynamic modul(osgi),struts 2 同样实现了对osgi的支持。目前,eclipse是基于osgi开发的,ibm的websphere v6.1,bea的所有产品都重构在osgi上,spring的应用服务器同样基于osgi,在EclipseCon2007上,osgi成为了主要的话题。Osgi受到如此的待遇,一点不奇怪,因为他具有无比强大的功能,改变传统的软件开发方式。Osgi采用树设计模式,将一个项目分成多个模块(bundle),每个模块单独部署,单独运行,说白了,就是将一个工程分成许多的插件,每个插件单独开发,重复使用,实现完全的即插即用。太令人激动了。如果公司的软件开发基于osgi,将会有大量的重复使用的osgi bundles,公司将会积累大量的无形资产,软件开发将会越来越快。而ibatis现在还没见到对osgi的支持。
11、hibernate的社区非常繁荣,ibatis则相对平静。
综述,hibernate还有很多优秀的特点,只是我们不知道。Hibernate与ibatis,就像大家闺秀对小家碧玉,大家闺秀不仅具有小家碧玉的全部,而且知名度更高,更受尊敬,更受人追捧,更有发展前途。小家碧玉尽管也很有魅力,但始终比上大家闺秀。
Hibernate所做的不仅仅是dao层的持久化工作,而ibatis恰恰如此。
选择hibernate,选择orm的王者,选择更全面的工作体验,选择更高效的工作方式,选择更多的利润;选择Gavin King,跟着领袖走;选择jboss,追随开源的潮流,不偏离java的发展方向。
一切都不是借口。一切都在发展,hibernate会越来越好。
发表评论
-
Hibernate最佳实践
2013-03-29 11:43 1411基本使用方法 一、导入相应的包 1、hiberna ... -
hibernate 的 CascadeType 属性
2013-03-27 15:00 1485@Entity @Table(name="or ... -
Hibernate 面试中最常考察的知识点整合
2013-03-26 17:31 1119转:http://jianfulove.iteye.com ... -
HiberNate学习-4 映射关系
2013-03-08 15:57 01 hibernate多对多关联映射(双向User<- ... -
HiberNate学习-4 映射关系-多对多
2013-03-08 15:59 8821 hibernate多对多关联映射(双向User< ... -
HiberNate学习-5 总结
2013-03-08 16:00 11191.Hibernate的lazy策略 hibernate ... -
HiberNate学习-5 总结
2013-03-08 15:53 01.Hibernate的lazy策略 hibernate ... -
HiberNate学习-4 映射关系
2013-03-08 15:51 01 hibernate多对多关联映射(双向User<- ... -
HiberNate学习-4 映射关系
2013-03-08 15:50 01 hibernate多对多关联映射(双向User< ... -
HiberNate学习-3 映射关系
2013-03-08 15:46 8461 Hibernate的一对多关联 ... -
HiberNate学习-2映射关系
2013-03-08 15:46 01.Hibernate的一对一主键关联映射 默认 ... -
HiberNate学习-2映射关系
2013-03-08 15:40 9731.Hibernate的一对一主键关联映射 默认c ... -
HiberNate学习-2映射关系
2013-03-08 15:40 01.Hibernate的一对一主键关联映射 默认c ... -
HiberNate学习-1入门
2013-03-08 15:34 991一、Hibernate必须包(3.2)hibernate3. ... -
双向关联
2010-07-22 16:59 1158One-To-One @En ... -
Spring+JPA工程
2010-05-20 14:32 1804JPA需要的jarhibernate-distribution ... -
Hibernate 3新特性介绍及发展趋势
2010-05-20 14:12 1339Hibernate是一种强大的可 ... -
Hibernate延迟加载机制
2010-05-20 14:05 936该贴转自http://blog.163.com ... -
Hibernate Annotation语法
2010-05-20 14:01 1159CascadeType: CascadeType.PERSI ... -
Hibernate的生命周期
2010-05-20 14:00 1793要在应用中使用Hibernate ...
相关推荐
Hibernate高官谈Hibernate3.2新特性
Hibernate 3新特性 Hibernate 3相对于前一版本,引入了许多新的特性和改进,包括但不限于:增强了对JPA的支持、提供了更灵活的配置选项、优化了性能、改进了缓存机制、支持更多的数据库类型等。这些新特性使得...
在探讨Hibernate ORM的新特性——Service Registry之前,我们首先要理解Hibernate ORM的基本概念。Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许开发者使用面向对象的编程语言(如Java)来处理数据库...
Hibernate5是Java开发中常用的持久化框架之一,其在之前的版本基础上引入了许多新特性,以提升性能、增强灵活性和简化开发。以下是对这些新特性的详细介绍: 1. **新引导API**:旧的引导API(Configuration类)在...
5. **对象关系映射(ORM)**:Hibernate3的核心特性就是ORM,它允许开发者用面向对象的方式处理数据库操作。通过注解或XML配置,可以将Java对象与数据库表进行映射,从而实现对象的保存、更新、删除和查询。 6. **...
Hibernate 3.3是Java开发中的一个里程碑,它在之前的版本基础上引入了多个重要的新特性,提升了ORM(对象关系映射)的效率和便捷性。在这个版本中,开发者可以享受到更加强大和灵活的数据持久化服务。以下是 ...
Spring3作为其第三个主要版本,引入了更多增强功能和对新特性的支持,如Spring MVC的改进、对JSR-303/JSR-349 Bean Validation的支持以及Spring Security的增强。 Hibernate则是一个对象关系映射(ORM)框架,它...
总之,Spring 4与Hibernate 3的整合是Java EE开发中的重要实践,它将Spring的IoC和AOP特性与Hibernate的ORM能力结合在一起,形成了强大的数据访问层。通过理解并掌握这一技术,开发者能够更好地应对复杂的数据库操作...
**Hibernate3jar包详解** Hibernate 是一款开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。Hibernate3是其第三个主要版本,发布于2006年,相较于之前的版本,它引入了许多增强功能和...
**Hibernate 3 最新教程详解** Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的...通过深入学习和实践,你可以掌握Hibernate 3的核心特性和最佳实践,提升Java应用程序的数据管理能力。
《Hibernate3中文文档》是Java开发领域中一份重要的参考资料,主要涵盖了Hibernate3框架的各种特性和用法。Hibernate作为一款开源的对象关系映射(ORM)框架,极大地简化了Java应用程序对数据库的操作,使得开发者...
Hibernate 3是Hibernate ORM框架的一个重要版本,它引入了许多新特性,如对JPA(Java Persistence API)的支持,以及对注解的广泛使用。这一版本的更新使得Hibernate更加易于使用,同时也提高了代码的可读性和可维护...
### 关于《Apress - Pro Hibernate3》的知识点解析 #### 一、书籍基本信息与背景 - **书名**:《Pro Hibernate3》 - **作者**:Dave Minter 和 Jeff Linwood - **出版社**:Apress - **出版年份**:2005年 - **...
### Hibernate的高级特性 #### Hibernate概述 Hibernate是一个强大的对象关系映射(ORM)框架,它为Java应用程序提供了将Java对象映射到关系型数据库表的能力。通过Hibernate,开发者可以使用面向对象的方式处理...
在新版本中,Hibernate继续致力于提供更高效、更稳定以及更易用的特性。 描述中提到“别的版本下不了了”,这可能暗示了新版本可能是由于旧版本的下载通道出现问题或者已被官方停止支持,使得开发者需要转向最新...
Hibernate3是在Hibernate2的基础上进行优化和增强的版本,它引入了更多高级特性,如Criteria查询、HQL(Hibernate Query Language)以及对JPA(Java Persistence API)的支持。这些特性使得开发人员能够更加灵活地...
1. **依赖注入**:Spring3的DI特性使组件间的依赖关系变得清晰,易于测试和维护。 2. **事务管理**:Spring提供了声明式事务管理,简化了事务的处理,确保数据的一致性。 3. **数据持久化**:Hibernate3简化了数据库...
整合Hibernate 3可以让应用利用Spring的依赖注入(DI)和面向切面编程(AOP)特性,从而更好地实现事务管理、对象生命周期管理等。 要实现Spring与Hibernate 3的整合,你需要以下关键的jar包: 1. **hibernate3....
【标题】:“Hibernate3+MySQL简单学习实例” 【描述】:这个压缩包“hibernate3+mysql简单学习实例.rar”包含了一个使用Hibernate3 ORM框架与MySQL数据库进行交互的初级教学示例。Hibernate是一个强大的Java对象...