Java Hibernate和JPA之间有什么区别?

Java Hibernate和JPA之间有什么区别?,java,hibernate,jpa,jakarta-ee,jpa-2.0,Java,Hibernate,Jpa,Jakarta Ee,Jpa 2.0,当我在大学学习网络编程时,他们告诉我们hibernate 我们使用了一段时间,我甚至有机会在一家公司的真实场景中使用它将近8个月。 现在我完全切换到JavaEE6(imin love:)),我使用JPA满足我的ORM需求 我已经用了好几个月了,但我真的不明白两者之间有什么区别。为什么有些人说一个更好或更坏? 我在两者中进行映射和注释的方式几乎相同 也许你可以解决我的一些疑问: -每种方法的优点和缺点是什么 -Hibernate使用JPA还是相反(它们相互依赖) -从功能的角度来看,一个有哪些功能

当我在大学学习网络编程时,他们告诉我们hibernate

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

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

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

-每种方法的优点和缺点是什么

-Hibernate使用JPA还是相反(它们相互依赖)

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

-两者之间还有什么区别吗?

JPA(Java持久化API)是一种API,JPA2.0属于JSR317组。基本上,它是一个通过使用ORM(对象关系映射)进行数据持久化来管理关系数据的框架

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

Hibernate使用JPA还是其他 (它们相互依赖吗 其他的

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

它的优点和优点是什么 各自的缺点是什么

优点:

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

这就是我对Hibernate的全部了解。

Hibernate是新的现代JPA的灵感来源。EJB3.0ORM(JPA)基于简单、干净、漂亮的Hibernate

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

我看不出其中一个比另一个有什么显著的优势。也许主要的事情是,如果您使用JPA,那么您使用的是纯JavaEE实现。这意味着,从理论上讲,您可以切换到不同的应用程序服务器,即使新的应用程序服务器不使用Hibernate,您的应用程序仍可以工作。请记住,我在理论上说过:-)


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

JPA是持久性映射的API标准。它在冬眠后很长一段时间才发育成熟,并受到冬眠的严重影响

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

此外,Hibernate提供了一些JPA标准没有提供的特性,但这些特性通常是不需要的


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

JPA是一个标准,由许多不同的库实现,例如TopLink。 Hibernate是一个早在JPA之前就存在的库,它具有JPA所不具备的一些特性

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


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

我将尝试尽可能简单地解释

interface JPA {
    void merge(Object o);
}

class Hibernate implements JPA {
    @Override
    public void merge(Object o) {
        // Implementation here
    }
}
-每种方法的优缺点是什么

JPA属性是可移植的。以javax.persistence开头的库与JPA关联。像hibernate这样的提供程序提供不可移植的属性。因此,最佳实践是尽可能使用javax.persistence

-Hibernate使用JPA还是相反(它们相互依赖)

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

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

Hibernate=ORM+JPA的实现 因此,您将在Hibernate中发现一些额外的特性

-两者之间还有什么区别吗


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

关于您提到的“JPA在某些应用程序服务器中使用Hibernate”,我很好奇,GlassfishV3.0使用Hibernate吗?我使用Glassfish,我想有时我在控制台上看到一些与hibernate相关的消息,当构建或执行一些映射时。@sfrj我不认为Glassfish使用hibernate。我想它使用了一个名为TopLink(属于Oracle)的库。我可能弄错了,所以,我想我在控制台中看到了hibernate这个词好几次:)让我们澄清一下;任何应用服务器都可以支持任何JPA实现。它可能与JEE供应商开发的产品捆绑在一起,但这并不一定意味着对该应用程序来说是最好的,您可以使用您选择的实现。如果Java EE 5只支持JPA 1.0,我可以在Java EE 5环境中使用最新版本的HIbernate(4.1.x)吗?这个答案并不清楚,如果没有一个甚至可以是Hibernat的实现,JPA就无法工作