JPA还是Hibernate for Java Persistence?

我正在研究Java,.NET和Groovy中的企业应用程序的开发。 对于每个平台,我们将尝试实现简单的SOAP Web服务是多么困难。 我们将使用最常用的工具和库,尽可能准确地研究现实世界。

在这方面,当使用Hibernate进行持久化时,它会更好地反映真实世界使用新的JPA(Java Persistence API),还是JPA出现之前存在的Hibernate自定义API?

正如您可能已经意识到的那样,从3.2开始,Hibernate已通过JPA认证。 您可以轻松地将Hibernate用作JPA提供程序,而无需使用任何Hibernate的“自定义”API。

我建议使用直接JPA和Hibernate作为提供者。 并使用注释而不是XML(更好)。

然后当你需要一些额外的东西时,你总能获得Hibernate Session。 例如,我经常发现我需要这样做才能将集合作为参数(setParameterList)传递给查询。

你如何措辞你的问题很有趣

新的 JPA …或普通的旧 Hibernate

听起来像是一个人永远存在而另一个人刚被释放。 当然不是这样。 JPA不仅受到Hibernate的影响,还受到TopLink和J2EE实体bean的影响。 对JSR 220草案的第一次引用是从2003年开始的 – 那对于新的如何? 如果您将JPA与Hibernate一起使用,您仍然可以使用Hibernate并可以自由应用Hibernate所拥有的任何专有扩展。

因此,您可以选择:使用专有API或使用等效的既定API和标准API …

你可以坚持使用一个纯粹的JPA规范,以防万一你要换掉Hibernate,但你可能会发现在某些时候你可能永远不会把它换掉,而你却错过了所有非常棒的Hibernate特有的function。

我建议直接使用Hibernate,正如Damo建议的那样,注释而不是XML。 确保你对Hibernate带来的“魔力”有一个坚定的理解。 如果你不小心,你可能真的会破坏数据库。 例如,根据您如何进行@OneToOne连接,存在n + 1查询问题:

Hibernate OneToOne自动连接获取(解决n + 1问题)

我还建议使用嵌入式数据库对Hibernate查询进行单元/集成测试,并观察生成的SQL,以确保它看起来像是您手动编写的内容。