Hibernate高官专访:谈Hibernate 3.2
【IT168 分析评论】
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只定义了一小部分的对象类型转化库。
0
相关文章