java - JPA 2 和 Hibernate 之间有什么关系?

标签 java hibernate jpa orm jpa-2.0

我对 Java ORM 世界还很陌生,我对 JPA 2Hibernate 之间的关系和差异有一些疑问。

阅读文档,在我看来,JPA2 是一个规范,而Hibernate该规范的特定实现。这是真的吗? JPA 2 是一个规范到底意味着什么?什么是规范?我认为它提供了一些接口(interface)(或类似的东西),其中定义了在数据库上执行操作的常见所需行为(例如:插入、删除、选择、更新操作等)。

所以我认为JPA2提供了一个常见操作的列表以及未实现的方法来执行它,并且像Hibernate这样的ORM框架实现了它。

这是真的还是我错过了什么?所以这意味着我不能在某种独立版本中使用JPA 2,因为它没有实现,但同时我可以使用 Hibernate 作为独立工具(不使用 JPA)?

所以在我看来,我可以独立使用 Hibernate 并绑定(bind)到 JPA 2

这意味着我可以使用 JPA 2 注释我的类,但如果我不使用它的实现之一,什么也不会发生?

使用与 JPA 2 绑定(bind)的 Hibernate 到底有什么好处。我认为这与标准化以及更换 Hibernate 并使用其他实现替换它而无需更改我的代码的可能性有关。但是在独立版本中使用 Hibernate 和绑定(bind)到 JPA 2 的主要区别是什么?与使用 Hibernate 独立版本相比,JPA 2 为我提供了更多功能还是限制了我的尊重?我的功能少了吗?

Tnx

最佳答案

简单来说 - JPA 是一个接口(interface),而 Hibernate 是它的实现。因此,最好的方法是使用 JPA 2 注释 - 在这种情况下,规则适用于针对接口(interface)而不是实现的代码

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

相关文章:

java - Hibernate/JPA 在启动时不验证数据库模式

java - Liquibase 不基于 JPA 实体创建 diff 变更日志

java - 加入MP3文件——将Java代码转换为Android

java - 如何在命令行中生成Jacoco.exec?

java - Hibernate 不会在 getter 处获取 @Id 注释

java - Criteria API 的性能问题

java - JUnit 和 Spring : Cannot find persistence. xml - 但它确实存在

java - 在包内传递字节数组将变为空

Java线程程序在for循环之前退出(程序的服务器端)(Eclipse使用Mac终端/命令行参数)

java - hibernate 映射 : referencing a set of Entities with OneToMany and one Entity of that set with OneToOne