我正在使用 Spring 3 和 Hibernate 4 JPA。我很困惑javax.持久性罐。我在 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,它定义了您的应用程序应该使用的供应商中立的接口。
第二个是该 API 的 EclipseLink 实现。
可以删除对第一个的引用javax.persistence
依赖项,只需使用 EclipseLink jar。然而,有充分的理由不这样做。
针对供应商中立编写和编译代码javax.persistence
API 确保您的应用程序代码可移植到不同的持久性提供程序。例如,如果您希望切换到 Hibernate,那么您可以将其放入 pom.xml 中并删除org.eclipse
依赖性,无需更改任何应用程序代码。
但是,您应该更改一个额外的小细节。为了确保您的应用程序可以在持久性提供程序之间切换,“实现”依赖项应仅在运行时使用。否则,特定于供应商的代码很容易进入您的代码库。将以下内容添加到您的org.eclipse
依赖项并查看您的应用程序是否可以编译。
<scope>runtime</scope>
因此,您可能会发现您的应用程序中有 EclipseLink 特定的代码。这意味着您无法在不更改代码库的情况下更改持久性提供程序。
这是否是一个问题取决于你。 ;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)