wake-up-neo.net

Wo finde ich eine JPA2-Maven-Abhängigkeit?

Ich versuche, ein Implementierungs-agnostisches Maven-Modul zu erstellen, das auf JPA2 basiert. Leider ist die einzige Abhängigkeit von Maven JPA JPA1-basiert, und daher kann ich die EntityManager.detach () -Methode nicht verwenden, da dies nur eine JPA2-Option ist.

Im Idealfall würde ich gerne meine javax.persistence-Abhängigkeit in meinem Pom angeben können und die App/den Container zur Bereitstellung der JPA2-Implementierung benötigen. Leider kann ich keine solche Abhängigkeit finden.

Kann ich an diesem Punkt nur die Option hibernate-jpa-2.0-api 1.0.0.FINAL als bereitgestellte Abhängigkeit angeben?

31
Eric B.

Die Hibernate JPA 2-Klassen (javax.persistence ...) sind hier:

<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

Ich weiß, dass dies ein ziemlich alter Beitrag ist. Wenn Sie von der Implementierung unabhängig werden wollen, sollten Sie stattdessen die Java EE-API-Abhängigkeit verwenden.

Fügen Sie einfach zu Ihrem POM hinzu:

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

Dabei ist $ {jee.version} Ihre gewünschte Java EE-Version. Ich verwende derzeit 7.0. Es hat alle Abhängigkeiten von EJB, JPA und JSF APIs.

43
ramsvidor

Ich verwende den javax.persistence-Artefakt (und nicht den eclipselink-Artefakt) aus dem EclipseLink-Maven-Repository, um auf die JPA 2-API-Klassen zuzugreifen. Ausschnitte aus POM sind:

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

Das javax.persistence-Artefakt enthält alle API-Klassen und keine der EclipseLink-Klassen (außer zwei), sodass Sie den Gültigkeitsbereich wie angegeben angeben können. Dies gilt auch für den EclipseLink-Anbieter für JPA (der sich in der eclipselink-Artefakt-ID befindet).

Ich habe das javax.persistence-Artefakt nicht mit dem hibernate-entitymanager-Artefakt gemischt. So habe ich die Abhängigkeit für ein anderes Projekt verwaltet, das auf Hibernate EntityManager anstelle von EclipseLink für den JPA-Anbieter angewiesen ist. Ein Ausschnitt aus dem POM des zweiten Projekts ist unten dargestellt:

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

Ich ändere die Abhängigkeitsbereiche in anderen Projekten von provided in test, um sicherzustellen, dass für Komponententests ein JPA-Anbieter im Klassenpfad vorhanden ist. Dies geschieht in erster Linie, um die Nebeneffekte der Verwendung der javaee-api-Abhängigkeit auszublenden, die ich im übergeordneten POM verwende, um Kompilierzeitreferenzen auf mehrere Java EE 6-API-Klassen zuzulassen.

10
Vineet Reynolds

Dies ist die relevanteste und offizielle API für JPA2 von EclipseLink:

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

Im Gegensatz zur Hibernates-API handelt es sich hierbei um eine offizielle Spezifikation, die bessere Generics unterstützt, wenn die Criteria-API verwendet wird.

4
kospiotr

Für die JPA 2.2 API ist ein "offizielles" Artefakt von maven central erhältlich, siehe diese Antwort .

3
rmuller

Heute denke ich, dass das aktuellste ist:

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

So können Sie JPA in einem Maven verwenden: 

<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

Ich konnte meine Maven JPA2-Abhängigkeit auflösen, indem ich der pom.xml-Datei des Projekts ein paar Abhängigkeiten hinzufügte. Nachfolgend finden Sie den XML-Code für die Abhängigkeiten.
Ich habe die neuesten Versionen von groupId und artefaktId gefunden, indem ich die Verzeichnisse auf Maven Central eingraviert habe. Ich bin nur durch die Verzeichnisstruktur gegangen, bis ich die Dateien metadata.xml für die Artefakte persistence.core und persistence.jpa gefunden habe.
Note: Die Abhängigkeit von persistence.jpa ist das, was in der javax.persistence jar tatsächlich zum Tragen kommt.

    <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