当我在大学学习网络编程时,他们告诉我们关于休眠的问题。
我们使用了一段时间,我甚至有机会在公司的真实场景中使用它近8个月。 现在我完全切换到Java EE 6( Im in love:)),我使用JPA来满足我的ORM需求。
我使用它已经有几个月,但我真的不明白一个和另一个之间有什么区别。为什么有些人说一个或另一个更好或更差? 我在两者中做映射和注释的方式几乎相同......
也许你可以解决我的一些疑虑:
- 各自的优点和缺点是什么?
- Hibernate是否使用JPA或其他方式(它们是否相互依赖)?
- 从功能的角度来看,有哪些功能没有另一个?
- 两者之间还有其他差异吗?
答案 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。
有什么优点和 各自的缺点?
优点:
这就是我所知道的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库。