我正在使用Spring 3和Hibernate 4 JPA。我对javax.persistence JAR感到困惑。我在Google上发现了下面的两个Maven依赖项。请告诉我在以下两个依赖项中需要哪一个?
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.0.0</version>
</dependency>发布于 2014-02-03 09:38:34
这些javax.persistence.persistence-api中的第一个是API,它定义了应用程序应该使用的与供应商无关的接口。
第二个是该API的EclipseLink实现。
可以删除对第一个javax.persistence依赖项的引用,只需使用EclipseLink jar即可。然而,有很好的理由不这样做。
根据与供应商无关的javax.persistence API编写和编译代码,可以确保应用程序代码可移植到不同的持久性提供程序。例如,如果希望切换到Hibernate,则可以将其放入pom.xml并删除org.eclipse依赖项,而无需更改任何应用程序代码。
然而,还有一个额外的细节,你应该改变。为了确保应用程序能够在持久性提供程序之间切换,“实现”依赖应该只在运行时使用。否则,特定于供应商的代码很容易进入您的代码库。将以下内容添加到org.eclipse依赖项中,并查看应用程序是否编译。
<scope>runtime</scope>因此,您可能会发现您的应用程序中包含特定于EclipseLink的代码。这意味着,如果不更改代码库,就无法更改持久性提供程序。
这是否是个问题取决于你。;)
发布于 2014-02-03 09:22:19
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.0.0</version>
</dependency>这是最新的和紧凑的hibernate 4。也是最新版本的hibernate支持JPA2.1.0请检查这个链接
发布于 2014-02-03 09:36:05
您不需要显式地包含该依赖项,它位于Hibernate pom中,并且将被临时添加。
https://stackoverflow.com/questions/21523445
复制相似问题