关于一款将由完整的Java EE应用服务器(例如GlassFish)提供支持的Java EE Web应用程序,哪种ORM解决方案最好?EJB 3 还是 Hibernate 3? 为什么?
关于一款将由完整的Java EE应用服务器(例如GlassFish)提供支持的Java EE Web应用程序,哪种ORM解决方案最好?EJB 3 还是 Hibernate 3? 为什么?
这两个概念完全不同。
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
它们很相似;EJB 3.0规范从Hibernate和Spring中吸取了很多。
我没有任何确切的指标可以引用,但我认为如果你正在使用Glassfish,那么使用它的所有技术对我来说是有意义的。为什么要引入另一个依赖项?看看Glassfish是否能够为您完成工作。