Hibernate和JPA有什么区别?

时间:2011-04-15 15:18:45

标签: java hibernate jpa java-ee jpa-2.0

当我在大学学习网络编程时,他们告诉我们关于休眠的问题。

我们使用了一段时间,我甚至有机会在公司的真实场景中使用它近8个月。 现在我完全切换到Java EE 6( Im in love:)),我使用JPA来满足我的ORM需求。

我使用它已经有几个月,但我真的不明白一个和另一个之间有什么区别。为什么有些人说一个或另一个更好或更差? 我在两者中做映射和注释的方式几乎相同......

也许你可以解决我的一些疑虑:

- 各自的优点和缺点是什么?

- Hibernate是否使用JPA或其他方式(它们是否相互依赖)?

- 从功能的角度来看,有哪些功能没有另一个?

- 两者之间还有其他差异吗?

6 个答案:

答案 0 :(得分:8)

JPA(Java Persistence API)是一个API,JPA 2.0是JSR 317组。基本上,它是一个通过使用ORM(对象关系映射)来管理关系数据的框架,用于数据持久性。

Hibernate是一个ORM库,可将POJO / JavaBeans映射到数据持久性。 ORM和JPA都有一个对象/关系元数据(XML,Annotations),用于将POJO映射到数据库表。

  

Hibernate是否使用JPA或其他   方式(他们依赖于每一个   其他)?

Hibernate 3现在支持JPA 2.0。 JPA是使用对象模型描述关系数据的关系和管理的规范。由于JPA是一个API,Hibernate实现了这个API。您所要做的就是使用JPA API类/接口编写程序,将Hibernate配置为JPA资源,然后运行JPA。

  

有什么优点和   各自的缺点?

优点:

  • 避免使用低级JDBC和SQL代码。
  • 它是免费的(EclipseLink,例如JPA)。
  • JPA是EJB3和Java EE的标准和一部分。

这就是我所知道的Hibernate。

答案 1 :(得分:7)

JPA是持久性映射的API标准。它是在Hibernate之后很久就开发出来的,并且深受其影响。

要使用JPA,您需要JPA实现。 Hibernate是一个这样的JPA实现,因为它被扩展为实现它所启发的API。

此外,Hibernate提供了JPA标准不提供的一些功能,但通常不需要这些功能。

另一方面,如果您只使用JPA功能,那么您的代码也应该使用不同的JPA实现 - 经验表明兼容性很少是100%,但切换到不同的实现不需要大量工作。

答案 2 :(得分:3)

JPA是一种标准,由许多不同的库实现,例如TopLink。 Hibernate是一个早在JPA之前存在的库,它具有JPA没有的一些功能。

Criteria api同时存在,但我认为Hibernate的使用起来要简单得多。 因此,如果您使用JPA,您可以毫无问题地切换到不同的实现,或者您可能有一个定义基本JPA dao的基础项目和两个使用不同实现的不同项目。

如果您使用Hibernate,可能更容易找到示例和专家。

答案 3 :(得分:1)

Hibernate是新现代JPA的灵感来源。 EJB 3.0 ORM( JPA )基于简单,干净,漂亮的Hibernate。

当JPA诞生时,Hibernate成为了JBoss的JPA实现基础。因此,如果您使用的是JBoss和JPA,那么您可能正在使用Hibernate。

我无法发现任何一方面的重大优势。也许最重要的是,如果您使用JPA,那么您使用的是纯JavaEE实现。这意味着,理论上,您可以切换到不同的应用程序服务器,即使新的应用程序服务器没有使用Hibernate,您的应用程序仍然可以工作。请记住,我说 IN THEORY 。 : - )

JPA在某些应用程序服务器中使用Hibernate。 RedHat的JBoss是使用Hibernate实现JPA的主要产品。

答案 4 :(得分:0)

interface JPA {
    void merge(Object o);
}

class Hibernate implements JPA {
    @Override
    public void merge(Object o) {
        // Implementation here
    }
}

答案 5 :(得分:0)

我会尽可能简单地解释。

  

- 各自的优点和缺点是什么?

JPA属性是可移植的。以javax.persistence开头的库与JPA相关联。像hibernate这样的提供者提供了非便携式属性。因此,最佳做法是尽可能使用javax.persistence。

  

- Hibernate是否使用JPA或其他方式(它们是否相互依赖)?

JPA是对JDBC的抽象。 JPA是规范。它需要一个提供者。 Hibernate是众多提供商之一。

  

- 从功能的角度来看,有哪些功能没有另一个?

Hibernate = ORM + JPA的实现 因此,你会在Hibernate中找到一些额外的功能。

  

- 两者之间还有其他差异吗?

Hibernate在过去几年里发生了很大的变化。我发现JPA是一致的。因此,如果不需要,尽可能尝试使用javax.persistence库。