Java Hibernate还是JPA?

Java Hibernate还是JPA?,java,hibernate,spring,jpa,Java,Hibernate,Spring,Jpa,对于Spring3.0,建议使用hibernate或JPA。当与Spring3.0一起使用时,两者的优缺点是什么 注意:我们也假设将其用于Spring数据访问。我更喜欢使用带EclipseLink的JPA。原因: JPA是标准的,Hibernate不是 使用EclipseLink是因为带有Hibernate的JPA有一些奇怪的实现 波佐:我发现了一些,不幸的是,它并不那么明显,因为它只发生在一些极端情况下。我可以想到: ElementCollection与JoinTable配合使用很好,

对于Spring3.0,建议使用hibernate或JPA。当与Spring3.0一起使用时,两者的优缺点是什么


注意:我们也假设将其用于Spring数据访问。

我更喜欢使用带EclipseLink的JPA。原因:

  • JPA是标准的,Hibernate不是
  • 使用EclipseLink是因为带有Hibernate的JPA有一些奇怪的实现
波佐:我发现了一些,不幸的是,它并不那么明显,因为它只发生在一些极端情况下。我可以想到:

  • ElementCollection与JoinTable配合使用很好,这是错误的!ElementCollection应附带CollectionTable
准确地说,您应该使用Java持久性API,然后可以使用Hibernate作为实现

没有实现的JPA一文不值


JPA是一个标准,所以如果您只使用它的API,您可以用其他一些JPA实现替代Hibernate。如果您使用Hibernate的某些特定API是因为您需要普通JPA没有提供的功能,那么您将面临供应商锁定的情况,因此您必须小心这一点。

这取决于我们的应用程序

如果您不确定永远不需要更改持久性提供程序,强烈建议使用JPA(2.0)

如果您确信永远不会更改持久性提供程序,那么我建议您也使用JPA(2.0)。但是(仅)在这种情况下,如果您有标准JPA无法解决的问题,您可以使用您选择的JPA提供商的专有功能。-但是,明智地使用它,如果你选择这种方式一次,就很难回头


当然,JPA只是一个API,所以你需要它的实现我使用Hibernate作为JPA提供程序,但主要是因为我一直处于第二个场景(永远不会改变它),我需要Hibernate搜索和Envers等附加功能。

我想说,JPA实现是由Hibernate提供的。为什么?因为

  • 如果需要的话,以后切换到其他JPA实现会更容易
  • Hibernate是目前最主要和最流行的ORM之一
  • 有很多书
  • 丰富的文档,令人敬畏的参考资料
  • 很容易在SO和其他地方获得支持

实际上,我也不介意使用Hibernate独有的特性。我认为坚持使用Hibernate没有任何问题,只是因为它不是一个标准。顺便问一下,是什么让你认为春天是标准的。它不是,你对它很好,因为它是有效的。对于Hibernate也可以这样说。如果你不清楚自己在做什么,Hibernate有时会变得毛茸茸的。

奇怪的实现是什么?我对hibernate没有任何问题。调试hibernate是地狱,我同意这一点。但是它工作得很好。FWIW“参考实现”只是指“证明规范可以实现的概念证明”。它并不意味着“最好”、“首选”或其他任何东西。这并不会使你的建议无效,只是那句话(关于成为国际扶轮)本身一文不值。