关于javax.persistence JAR的Maven依赖关系?

我使用的是Spring 3和Hibernate 4 JPA。 我对javax.persistence JAR很困惑。 我在Google下面找到了两个Maven依赖项。 请告诉我以下两个依赖项需要哪一个?

 javax.persistence persistence-api 1.0.2   org.eclipse.persistence javax.persistence 2.0.0  

第一个javax.persistence.persistence-api是API Jar,它定义了应用程序应该使用的与供应商无关的接口。

第二个是该API的EclipseLink实现。

可以删除对第一个javax.persistence依赖项的引用,只使用EclipseLink jar。 但是有充分的理由不这样做。

使用供应商中立的javax.persistence API编写和编译代码可确保您的应用程序代码可移植到不同的持久性提供程序。 例如,如果您希望切换到Hibernate,那么您可以将其放在pom.xml中并删除org.eclipse依赖项,而无需更改任何应用程序代码。

但是,您应该更改一些额外的细节。 为确保您的应用程序可以在持久性提供程序之间切换,“实现”依赖项应仅在运行时使用。 否则,特定于供应商的代码可以很容易地进入您的代码库。 将以下内容添加到org.eclipse依赖项中,并查看应用程序是否编译。

 runtime 

因此,您可能会发现您的应用程序中包含特定于EclipseLink的代码。 这意味着您无法在不更改代码库的情况下更改持久性提供程序。

这是否是一个问题取决于你。 ;)

  org.eclipse.persistence javax.persistence 2.0.0  

哪个是最新的和紧凑的hibernate 4.另外最新版本的hibernate支持jpa 2.1.0请检查此链接

你不需要明确地包含那个依赖,它在Hibernate pom中并且将被传递