Java 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正在运行 它的优点和优点是什么 各自的缺点是什么 优点: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还是相反(它们相互依赖) -从功能的角度来看,一个有哪些功能
- 避免使用低级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就无法工作