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

时间:2014-02-03 09:18:20

标签: java spring hibernate maven jpa

我正在使用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>

3 个答案:

答案 0 :(得分:11)

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

第二个是该API的EclipseLink实现。

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

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

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

<scope>runtime</scope>

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

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

答案 1 :(得分:1)

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.0</version>
</dependency>

哪个是最新版本和紧凑型hibernate 4.另外最新版本的hibernate支持jpa 2.1.0请查看link

答案 2 :(得分:0)

您不需要明确地包含该依赖项,它在Hibernate pom中并且将被传递地添加