web-dev-qa-db-ja.com

JPA2 Maven依存関係はどこで見つけることができますか?

JPA2に依存する実装に依存しないMavenモジュールを構築しようとしています。残念ながら、Maven JPA依存関係はJPA1ベースのみです。そのため、EntityManager.detach()メソッドはJPA2オプションのみであるため使用できません。

理想的には、Pomでjavax.persistence依存関係を指定し、アプリ/コンテナーにJPA2実装を提供することを要求できるようにしたいです。残念ながら、そのような依存関係は見つかりません。

この時点でhibernate-jpa-2.0-api 1.0.0.FINALを提供された依存関係として宣言する唯一の選択肢はありますか?

32
Eric B.

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>
38
Gene De Lisa

これは非常に古い投稿であることを知っています。実装にとらわれない場合は、代わりにJava EE API依存関係を使用する必要があります。

POMに追加するだけです:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>${jee.version}</version>
    <scope>provided</scope>
</dependency>

$ {jee.version}が必要な場合Java EEバージョン。現在7.0を使用しています。すべてのEJB、JPA、JSF APIの依存関係があります。

46
ramsvidor

JPA 2 APIクラスにアクセスするために、EclipseLink Mavenリポジトリーのjavax.persistenceアーティファクト(eclipselinkアーティファクトではなく)を使用します。 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>

javax.persistenceアーティファクトにはすべてのAPIクラスが含まれており、EclipseLinkクラスは含まれていません(2つを除く)。提供されているスコープを指定できます。これはEclipseLink JPAプロバイダーにも適用されます(eclipselinkアーティファクトIDにあります)。

javax.persistenceアーティファクトとhibernate-entitymanagerアーティファクトを混合していないため、JPAプロバイダーのEclipseLinkではなくHibernate EntityManagerに依存する別のプロジェクトの依存関係を管理しました。 2番目のプロジェクトの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>

他のプロジェクトで依存関係スコープをprovidedからtestに変更して、ユニットテストでクラスパスにJPAプロバイダーが含まれるようにします。これは、主に javaee-api依存関係 を使用する副作用を隠すために行われます。親POMで使用して、複数のJava EEへのコンパイル時参照を許可します。 6つのAPIクラス。

10
Vineet Reynolds

これは、EclipseLinkのJPA2に最も関連性が高く公式のAPIです。

<repositories>
    <repository>
        <url>http://download.Eclipse.org/rt/eclipselink/maven.repo/</url>
        <id>eclipselink</id>
        <layout>default</layout>
        <name>Repository for library EclipseLink (JPA 2.0)</name>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.Eclipse.persistence</groupId>
        <artifactId>javax.persistence</artifactId>
        <version>2.0.3</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Hibernates APIとは異なり、これは公式仕様のものであり、Criteria APIの使用に関してはより優れたジェネリックをサポートしています。

4
kospiotr

JPA 2.2 APIについては、「公式の」アーティファクトがMaven Centralから入手できます。 この回答 を参照してください。

3
rmuller

今日の時点で、最新のものは次のとおりです。

<dependency>                                          
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>    
    <version>1.0.0.Final</version>                    
</dependency>

MavenでJPAを使用する方法は次のとおりです。

<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.2</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.10.Final</version>
    <scope>runtime</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
        </exclusion>
        <exclusion>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
0
Koray Tugay

プロジェクトのpom.xmlファイルにいくつかの依存関係を追加することで、Maven JPA2の依存関係を解決することができました。依存関係のxmlコードについては、以下を参照してください。
Maven Central でディレクトリをドリルダウンして、最新のgroupIdおよびartifactIdのバージョンを見つけました。 persistence.core および persistence.jpa アーティファクトのmetadata.xmlファイルが見つかるまで、ディレクトリツリーをたどっていきました。
persistence.jpa への依存は、実際に javax。永続化jar

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.1.Final</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.Eclipse.persistence</groupId>
        <artifactId>org.Eclipse.persistence.core</artifactId>
        <version>2.6.4</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.Eclipse.persistence</groupId>
        <artifactId>org.Eclipse.persistence.jpa</artifactId>
        <version>2.6.4</version>
        <scope>compile</scope>
    </dependency>
0
A. Rick