java - 关于 javax.persistence JAR 的 Maven 依赖项?

标签 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>

最佳答案

第一个 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/

相关文章:

c# - C、C++、Java 和 C# 中的前后递增运算符行为

java - Spring 默认范围单例与否?

spring - BadCredentialsException : Kerberos validation not succesfull

sql - 让 Hibernate 绑定(bind)参数类型 "char(1)"而不是 "nvarchar(4000)"?

hibernate - 事务回滚,但插入了一条记录

java - 在 Hibernate 中使用 native SQL 查询将结果集放入 DTO

HotspotFX 上的 Java EOF 问题

javascript - js中如何调用外部jsp

java - 关于thrift函数返回列表

spring - 如何使用@JmsListener 获取转换后的对象