什么';Hibernate和JPA的区别是什么?

什么';Hibernate和JPA的区别是什么?,hibernate,jpa,Hibernate,Jpa,有人能透视JPA和Hibernate之间的区别吗。 或者这些互补的概念可以一起使用吗?大致上,JPA是java社区的一个标准,由Hibernate guys()实现(并扩展)。 作为一个规范,您将不会直接使用JPA,而是使用JPA实现 请注意,如果您使用hibernate JPA的扩展,您将破坏与其他JPA实现的兼容性(尽管有些人会说“为什么您应该使用另一个JPA实现?”)。2015年更新:这是一个非常古老的问题,在过去6年中发生了很多变化。如今JPAAPI的功能非常丰富,我建议使用JPA,因为

有人能透视JPA和Hibernate之间的区别吗。
或者这些互补的概念可以一起使用吗?

大致上,JPA是java社区的一个标准,由Hibernate guys()实现(并扩展)。 作为一个规范,您将不会直接使用JPA,而是使用JPA实现


请注意,如果您使用hibernate JPA的扩展,您将破坏与其他JPA实现的兼容性(尽管有些人会说“为什么您应该使用另一个JPA实现?”)。

2015年更新:这是一个非常古老的问题,在过去6年中发生了很多变化。如今JPAAPI的功能非常丰富,我建议使用JPA,因为越来越多的工具和框架都与之相适应。Spring Data JPA就是一个例子:它删除了许多常见任务的样板文件,并且非常高效:

原始答复:
我将回应cheng81的评论,并投票支持使用普通的HibernateAPI。JPA的功能集比Hibernate的小,我认为没有理由仅仅因为它是一个“标准”就用“纯JPA”来限制自己。Hibernate是一个非常好的解决方案,但是它的许可证(GPL)意味着它不能在某些项目中使用

JPA是一个规范,它支持一系列实现,包括Hibernate,但也支持OpenJPA和其他具有不同特性的产品


如果您可以不使用Hibernate,那么这样做可能是值得的,因为它成熟、稳定且性能良好。但是,如果您需要将持久性引擎合并到附带非GPL许可证的产品中,则需要走JPA路线(或支付商业Hibernate许可证的费用)。

Hibernate是LGPL,与GPL不完全相同。这是大多数人需要知道的。