EJB 3或Hibernate 3

12

关于一款将由完整的Java EE应用服务器(例如GlassFish)提供支持的Java EE Web应用程序,哪种ORM解决方案最好?EJB 3 还是 Hibernate 3为什么?


1
在持久化方案中,有许多其他具有独特优势的选择;你在问题描述中似乎忽略了它们,因此任何关于“最佳”的回答都是主观的。最佳方案很可能取决于应用本身、编写应用的开发人员以及使用的数据存储方式...而你没有提供这些信息。 - DataNucleus
3个回答

30

这两个概念完全不同。

EJB3是一种组件模型,与ORM没有直接关系。它有助于轻松管理事务,并从Java EE的标准ORM解决方案JPA中提供对实体管理器的易用访问。

Hibernate(3)确实是一个ORM解决方案,并且实现了JPA。

因此,更合理的问题是是否使用标准化的JPA接口,还是直接使用Hibernate核心API。然后可以跟进问题是是否单独使用JPA,还是与EJB 3结合使用。

答案有点取决于您的具体需求,但通常与EJB 3结合使用JPA是最简单的解决方案。在单独使用JPA或Hibernate时需要更冗长的代码,您必须手动管理事务,这可能很麻烦。

JPA vs Hibernate是另一个争论的话题。 JPA的好处是具有标准化的接口,因此更多开发人员可能会熟悉它。 另一方面,本机Hibernate APIs始终是JPA APIs的超集,因此提供更多功能。

通常,开发人员主要基于JPA编写代码,然后在有意义的地方使用一些Hibernate特定的注释或API调用。在99.99%的情况下,这种混合API使用是受支持的。

还要注意,Glassfish与EclipseLink捆绑在一起,而不是Hibernate。 EclipseLink与Hibernate相似,但比它早十多年。 Hibernate从EclipseLink(当时称为TopLink)中吸取了很多东西。

还可以参见我对类似问题的回答:Database table access via JPA Vs. EJB in a Web-Application


5
你所问的是哪个API更好:EJB3(JPA)还是Hibernate?我说这是因为你询问的是EJB3 JPA(仅为API),而Hibernate(是实现和API)。因此,要进行公正比较,您需要比较API。您可以在标准(JPA)和更强大的专有API(Hibernate)之间进行选择。
但是,选择JPA后还有另一个选择:其实现。选择Hibernate作为实现,您基本上可以放弃您的问题,因为JPA和Hibernate都可用。
因此,您的问题会改变:我应该选择哪个JPA实现(Hibernate,EclipseLink,OpenJPA,DataNucleus等)?...

请注意,EJB3(JPA)可能会有点令人困惑。它表明EJB3是JPA的另一个名称,但事实并非如此。在EJB 3.0中,它已经是一个完全独立的规范,这在当前的EJB 3.1版本中得到了正式确认。JPA在技术和组织上都是完全不同的规范。您不能以任何方式交换这些术语。 - Arjan Tijms
我想说的是,只是要遵循Ehsun问题中的术语。尽管感谢您的澄清。 - topchef

-1

它们很相似;EJB 3.0规范从Hibernate和Spring中吸取了很多。

我没有任何确切的指标可以引用,但我认为如果你正在使用Glassfish,那么使用它的所有技术对我来说是有意义的。为什么要引入另一个依赖项?看看Glassfish是否能够为您完成工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接