使用Hibernate EntityManager(与Hibernate Core相比)的任何缺点?

时间:2010-08-09 13:34:39

标签: java hibernate orm jpa jpa-2.0

Hibernate EntityManager文档states,即:

  

您可以将这三者结合使用,没有JPA的注释     编程接口和生命周期,甚至是纯本机Hibernate Core,     取决于项目的业务和技术需求。你可以在     所有时间都回归到Hibernate本机API,或者如果需要,甚至回归     本机JDBC和SQL。

使用JPA API(EntityManager)的代码显然更具可移植性(即使偶尔会回退到Hibernate Core)。

但是在使用纯Hibernate Core时我会有什么优势吗?我想知道,如果JPA 2模型真的适合Hibernate Core而没有任何矛盾吗? IOW,Core的后备是否容易且没有问题?

我主要担心的是:

也许差异不仅存在于API中,还存在于底层的语义中? (例如,可能发生冲突的不同事务/版本控制/锁定语义:在Core文档中提到了悲观锁定,但在EntityManager文档中没有提到 - 所以我仍然可以通过回退到Core而不会导致问题来使用悲观锁定吗?这样的事情...... 。)

4 个答案:

答案 0 :(得分:13)

  

但是在使用纯Hibernate Core时我会有什么优势吗?

如果JPA 2.0支持您需要的东西,我认为直接使用Hibernate Core没有优势(而且使用JPA 2.0,差距变得更小,需要回退到Core异常,而不是规则,是一件非常好的事情)。

  

我想知道,如果JPA 2模型真的适合Hibernate Core而没有任何矛盾吗?

从JPA 1.0开始,Hibernate开发人员创建了Hibernate3,并考虑了“JPA”,并在Hibernate3中采用了JPA语义,默认值等。您可能希望在此Tech Talk: Gavin King on Hibernate3 and EJB3中听取Gavin:

  

在这次技术讲座中,King讨论了如何   Hibernate3构建并扩展   EJB3 ,解决了以下主题:

     
      
  • Hibernate3的新功能
  •   
  • Hibernate3与JBoss中的EJB3容器之间的关系
  •   
  • Hibernate3与EJB3规范的区别
  •   
  • Hibernate在EJB外部提供的自定义注释
  •   
  • Hibernate的未来
  •   

根据我的实际经验,Hibernate与EJB 3不矛盾的事实是真的。

  

IOW,Core的后备是否容易且无问题?

无论您是否直接使用Core,使用它(EntityManagerSession的包装器)。所以,是的,如果你真的需要,那么回归Core很容易(对于那些仍然不像规范查询的规范那样)。并且,不,这不会导致任何问题(因为您实际上在JPA中使用它或其子集)。

相关问题

答案 1 :(得分:3)

很明显:取决于项目的业务和技术需求

但是在使用纯Hibernate Core时我会有什么优势吗?

不要忘记Hibernate Annotations和Hibernate EntityManager都是建立在Hibernate核心之上的。 再增加一层。除此之外,它依赖于存储在XML文件中的映射元数据。有些用户更喜欢使用XML文件而不是注释,因为它使域对象完全独立于您选择的DAO实现。但是在使用注释时,Hibernate与JPA书籍是明确的

  与原生XML文件相比,

减少了映射元数据的代码行,并且您可能希望注释具有更好的重构功能

JDBC >> Hibernate core >> Hibernate Annotations

...

JDBC >> Hibernate core >> Hibernate EntityManager

JPA 2更适合JPA 1未提供的内容。现在有很多新功能,例如

  • 面向对象的查询API
  • Wrapper的@Embeddable
  • @Embeddables @ElementCollection
  • 的集合

等等......

不要忘记JPA EntityManager允许您使用getDelegate方法检索其基础供应商特定的提供程序,如果您需要JPA不提供的功能。

答案 2 :(得分:1)

我喜欢直接使用Hibernate Core。我也更喜欢XML映射文件。

我对使用辅助层并不感兴趣,无法访问Hibernate核心功能。至于我关注持久层中的可移植性,是完全无问题

JPA API相对于Hibernate API的优点很少 - 我看到人们使用JPA命名查询(其中Criteria可能更清晰,更好),并且JPA注释设计得更好。

除此之外,JPA只是一个增加复杂性的层次。潜在的开销 - 没有任何好处。在这种情况下,在正确的情况下,正确的决定是反对使用它。

数据库可移植性OTOH非常真实。我有自定义分配器(生成器),它们是完全可移植的,性能更高,性能更高。比疯狂的混乱简单,这是错误设计的Hibernate。

这种方法在多个主要商业,政府和政府部门都非常成功。遗留数据库重新设计项目。简而言之 - 关注什么是重要的 - 以及API之上的API,不是它。

答案 3 :(得分:0)

使用JPA api的好处远远超过使用纯hibernate的任何缺点。我不是专家,但我不知道任何情况下降到休眠是有益的。 (放下来做纯JDBC是另一回事。)

如果有人有任何分享的例子,我很乐意看到它们。