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,以确保它看起来像是您手动编写的内容。
- EhCache Hibernate二级缓存maxBytesLocalHeap缓慢
- BeanFactory未初始化或已关闭 – 之前调用’刷新’
- 带有Hibernate的org.hibernate.hql.ast.QuerySyntaxException
- 使用JPA / Hibernate Criteria在日期之间拉
- 给出java.lang.IllegalArgumentException的Hibernate查询:遍历的节点不能为null
- 在预准备语句中重用匿名参数
- Hibernate从4.3.x迁移到5.x,用于方法org.hibernate.cfg.Configuration.getClassMapping(className)
- Spring应用程序似乎不是持久化数据
- 在子类的Hibernate中为每个表指定不同的序列