一尘不染

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

hibernate

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

阅读 1544

收藏
2020-06-20

共1个答案

一尘不染

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

第二个是该API的EclipseLink实现。

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

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

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

<scope>runtime</scope>

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

这是否有问题取决于您。;)

2020-06-20