我正在使用 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>
最佳答案
第一个 javax.persistence.persistence-api
是 API Jar,它定义了您的应用程序应该使用的供应商中立接口(interface)。
第二个是该 API 的 EclipseLink 实现。
可以删除对第一个 javax.persistence
依赖项的引用并仅使用 EclipseLink jar。然而,有充分的理由不这样做。
针对供应商中立的 javax.persistence
API 编写和编译代码可确保您的应用程序代码可移植到不同的持久性提供程序。例如,如果您希望切换到 Hibernate,那么您可以将其放入 pom.xml 并删除 org.eclipse
依赖项,而无需更改任何应用程序代码。
但是,您还应该更改一个额外的小细节。为确保您的应用程序可以在持久性提供程序之间切换,“实现”依赖项应仅在运行时使用。否则,特定于供应商的代码很容易进入您的代码库。将以下内容添加到您的 org.eclipse
依赖项并查看您的应用程序是否编译。
<scope>runtime</scope>
因此,您可能会发现您的应用程序中包含特定于 EclipseLink 的代码。这意味着您无法在不更改代码库的情况下更改持久性提供程序。
这是否是一个问题取决于您。 ;)
关于java - 关于 javax.persistence JAR 的 Maven 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21523445/