java - JPA 和 Hibernate 有什么区别?

标签 java hibernate jpa jakarta-ee orm

据我了解,JPA 2 是一种规范,Hibernate 是 ORM 的工具。另外,我知道 Hibernate 比 JPA 2 有更多的功能。但是从实际的角度来看,真正的区别是什么?

我有使用 iBatis 的经验,现在我正在尝试学习 Hibernate 或 JPA2。我拿起 Pro JPA2 书,它一直提到“JPA 提供者”。例如:

If you think a feature should be standardized, you should speak up and request it from your JPA provider

这让我很困惑,所以我有几个问题:

  • 单独使用 JPA2,我可以通过简单地注释 POJO 来从数据库获取数据
  • JPA2 是否应该与“JPA 提供程序”(例如 TopLink 或 Hibernate)一起使用?如果是这样,那么与单独使用 JPA2 或单独使用 Hibernate 相比,使用 JPA2 + Hibernate 有什么好处?
  • 您能推荐一本实用的JPA2好书吗? “Pro JPA2”看起来更像是一本有关 JPA2 的圣经和引用资料(直到本书的后半部分才涉及查询)。有没有一本书采用问题/解决方案方法来解决 JPA2?

最佳答案

正如您所说,JPA 只是一个规范,这意味着没有实现。您可以使用 JPA 注释尽可能多地注释您的类,但是如果没有实现,什么也不会发生。将 JPA 视为必须遵循的准则或接口(interface),而 Hibernate 的 JPA 实现是满足 JPA 规范定义的 API 的代码,并提供底层功能。

当您将 Hibernate 与 JPA 结合使用时,您实际上正在使用 Hibernate JPA 实现。这样做的好处是您可以将 Hibernate 的 JPA 实现替换为 JPA 规范的另一个实现。当您直接使用 Hibernate 时,您将锁定实现,因为其他 ORM 可能使用不同的方法/配置和注释,因此您不能直接切换到另一个 ORM。

有关更详细的说明,请阅读我的 blog entry .

关于java - JPA 和 Hibernate 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570233/

相关文章:

java - 有没有办法根据参数值使 MySQL 查询行为不同?

java - 使用泛型时出现类型不兼容错误

显示不存在文件夹的 Java List 数组。为什么?

java - 当我的应用程序设置为默认值时,手机本身的短信应用程序被禁用

java - 使用 bndtools 包装从默认包导入的第三方 jar

java - 使用 REST 访问 JPA 数据失败 找不到合适的 HttpMessageConverter

java - Hibernate 延迟初始化集合,带有 Oracle DB 提示

java - 应用程序级锁定和 hibernate 乐观锁定

java - 分层所有权导致请求缓慢

spring - JPA - 保存后自动生成的字段为空