我在哪里可以找到JPA2 Maven依赖?

Eri*_* B. 32 dependencies maven jpa-2.0

我正在尝试构建一个依赖于JPA2的实现不可知的maven模块.不幸的是,唯一的Maven JPA依赖是基于JPA1,因此,我不能使用EntityManager.detach()方法,因为它只是JPA2选项.

理想情况下,我希望能够在我的Pom中指定我的javax.persistence依赖项,并要求app/container提供JPA2实现.不幸的是,我找不到任何这样的依赖.

在这一点上,我唯一的选择是将hibernate-jpa-2.0-api 1.0.0.FINAL声明为提供的依赖项吗?

ram*_*dor 46

我知道这是一个相当古老的帖子,如果你想从实现中不可知,那么你应该使用Java EE API依赖.

只需添加到您的POM:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>${jee.version}</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

$ {jee.version}是您所需的Java EE版本.我目前正在使用7.0.它具有所有EJB,JPA和JSF API依赖项.


Gen*_*isa 38

Hibernate JPA 2类(javax.persistence ...)在这里:

<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


Vin*_*lds 10

我使用EclipseLink Maven存储库中的javax.persistence工件(而不是eclipselink工件)来访问JPA 2 API类.POM的片段包括:

<project>
    ...
    <dependencies>
        ...
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>javax.persistence</artifactId>
            <version>2.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    ...
    <repositories>
        ...
        <repository>
            <id>EclipseLink Repo</id>
            <!-- note that ampersands in this URL are escaped because this is in an 
            xml file - un-escape them to use in browser -->
            <url>http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo</url>
        </repository>
    ...
    </repositories>
...
</project>
Run Code Online (Sandbox Code Playgroud)

javax.persistence神器包含了所有的API类,并没有任何的EclipseLink类(除了两个),允许为你提供指定范围; 这甚至适用于EclipseLink JPA提供程序(在eclipselink工件ID中).

我没有将javax.persistence工件与hibernate-entitymanager工件混合,这就是我为另一个依赖于Hibernate EntityManager而不是EclipseLink的项目管理依赖关系的JPA提供程序.第二个项目的POM的片段如下所示:

<project>
    <dependencies>
    ...
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.6.5.Final</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    ...
</project>
Run Code Online (Sandbox Code Playgroud)

我确实将依赖范围从更改providedtest其他项目,以确保单元测试在类路径中具有JPA提供程序.这主要是为了掩盖使用javaee-api依赖项的副作用,我在父POM中使用它来允许编译时引用几个Java EE 6 API类.