2016-11-18 133 views
2

我当时的项目没有JPA,但是它使用Hibernate 任何人都可以请解释一下吗?hibernate如何在没有JPA规范的情况下工作

该项目的pom.xml

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.1.3.Final</version> 
    </dependency> 
+0

它可以简单地通过使用非标准的注释/类来工作,请注意,hibernate在JPA被指定之前已经存在很多年了 –

+0

或者你的意思是你在你的项目中使用JPA并且你不知道它是如何实现的因为你没有在你的依赖项中添加JPA API,所以你的意思是? –

+0

在JPA之前说hibernate是什么意思? Hibernate有其自己的规范吗? 实体类具有导入javax.persistence.Entity;这是否意味着我们使用JPA? –

回答

2

Hibernate是一个JPA实现,这意味着当你使用JPA,你可以使用Hibernate,EclipseLink的或任何其他实现的,但你会根据JPA规范代码,即使用javax.persistence.*接口,通常避免使用实现特定的功能(尽管这仍然是可能的)。

如果您直接使用Hibernate进行编码,则只能使用其特定的类(即org.hibernate.*)和方法,并且不能在任何地方参考javax.persistence。与类似。您可以编写使用驱动程序特定类的代码(有时但并不常见,您为什么需要有合理的理由),但有些类可以实现JDBC接口(Connection,ResultSet,Statement等),因此您可以编写常规当您切换到不同的数据库时,无需再次学习JDBC代码。

+0

奇怪,我们没有在pom.xml中包含JPA,但是在实体类中我有这个注解import javax.persistence.Entity; –

+0

你不需要单独包含JPA。它包含在Java EE中(当然,Hibernate库也需要实体的副本,因为它实现了它们)。您也可以交换使用许多注释,即Hibernate拥有自己的'@ Entity'注释,但您也可以使用JPA中的那个注释,并且它会相同。 – Kayaman

+0

现在很明显,这是默认情况下。谢谢 –

相关问题