2013-03-24 7 views
16

Ich arbeite gerade an einem Projekt, das jeweils EntityManager EntityManagerFacotry und Persistence aus dem Paket javax.persistence benötigt. Es scheint für den Datenbankdienst zu sein, aber der aktuelle Code ist nicht sehr gut dokumentiert. Bei der Suche nach Google scheint es, dass es eine XML-Datei geben sollte, die damit einhergeht, aber es gibt auch keine. Ich denke, meine Frage ist einfach, wie kann ich diese ungelösten Importe verschwinden lassen? Muss ich dem Build-Pfad ein weiteres JAR hinzufügen? Es scheint, dass ich nicht muss, seit es seit 1.5 ist.Der Import javax.persistence kann nicht aufgelöst werden

Jede Hilfe wird sehr geschätzt.

+4

Sie benötigen in der Tat eine JAR-Datei mit der JPA-API. Aber noch wichtiger, Sie benötigen eine Implementierung dieser JPA-Schnittstellen (Hibernate, EclipseLink, OPenJPA usw.). Ehrlich gesagt ist der Versuch, JPA zu verwenden, ohne zu wissen, was es ist und welche Implementierung gewählt wurde, ein sicherer Weg zum Desaster. Wenn Sie Code erben, sollte er zumindest einen Build-Prozess enthalten. –

+1

hmm ... nun, ich stimme zu. – Matt

+0

Interessant @JB Nizet, das Problem tritt bei mir in meiner Google App Engine-Integration auf und folgt den Schritt-für-Schritt-Anweisungen, was veraltet ist. Das Integrationsmodul soll gebündelt werden, damit die Android App nicht mit den Details umgehen muss. JPA wird nicht erwähnt und es wird erwähnt, dass MAVEN alle abhängigen SDK-Dateien usw. herunterladen und einbinden wird. – mobibob

Antwort

17

Hibernation-Distribution-3.6.10.Final \ lib \ jpa: Fügen Sie dieses Glas hinzu, um das Problem zu lösen. Es ist in lib-Ordner innerhalb vorhanden, die Sie haben einen Ordner namens jpa ---> innerhalb, dass Sie haben Hibernate-jpa-2.0-1.0.1.Final jar

11

Ja, Sie werden wahrscheinlich ein weiteres Glas oder hinzufügen müssen Abhängigkeit

ist Teil der Java Persistence API (JPA). Es ist nur eine API, man kann sie sich ähnlich wie eine Schnittstelle vorstellen. Es gibt viele Implementierungen von JPA und diese answer gibt eine sehr gute Ausarbeitung von jedem, sowie welche zu verwenden.

Wenn Ihr Import nicht aufgelöst werden kann, müssen Sie das JAR angeben, das JPA implementiert. Sie können das entweder tun, indem Sie es manuell herunterladen (und es zu Ihrem Projekt hinzufügen) oder indem Sie eine Deklaration zu einem Abhängigkeitsverwaltungstool hinzufügen (z. B. Ivy/Maven/Gradle). Siehe here für die EclipseLink-Implementierung (die Referenzimplementierung) in Maven Repo.

Danach sollten Ihre Importe aufgelöst werden.

Siehe auch here für was ist JPA über. Das XML, auf das Sie sich beziehen, könnte persistence.xml sein, was auf Seite 3 des Links erklärt wird.

aber sagen, dass können Sie nur an die falsche Ziellaufzeit werden zeigen

Wenn ich mich richtig erinnere, brauchen Sie nicht eine JPA-Implementierung zur Verfügung zu stellen, wenn Sie es in ein JavaEE Applikationsserver bereitstellen wie JBoss. Siehe here "Beachten Sie, dass Sie es normalerweise nicht benötigen, wenn Sie Ihre Anwendung auf einem Java EE 6-Anwendungsserver (wie zum Beispiel JBoss AS 6) bereitstellen." Versuchen Sie, die Ziellaufzeit Ihres Projekts zu ändern.

Wenn Ihr lokales Projekt so eingerichtet wurde, dass es auf Tomcat verweist, während Ihr Remote-Repo einen JavaEE-Server voraussetzt, könnte dies der Fall sein. Den Unterschied zwischen Tomcat und JBoss finden Sie unter here.

Edit: Ich habe mein Projekt so geändert, dass es auf GlassFish anstelle von Tomcat und javax.persistence.* ohne eine explizite JPA-Abhängigkeit zeigt.

+3

Dies ist eine viel bessere Antwort IMHO. –

1

Meine Lösung war, die Maven-Profile auszuwählen, die ich in meiner pom.xml definiert hatte, in der ich die Winterschlafabhängigkeiten deklariert hatte.

CTRL + ALT + P in der Eclipse. In meinem Projekt habe ich dieses Problem und viele andere erlebt, weil ich in meinem POM verschiedene Profile zur Unterstützung von Glassfish 3, Glassfish 4 und auch WildFly habe, also verschiedene Versionen von Hibernate pro Container sowie verschiedene Java-Kompilierungsziele und bald. Durch die Auswahl der aktiven Maven-Profile wurde mein Problem gelöst.

0

Wenn Sie Hibernate als JPA-Implementierung verwenden und Maven/Gradle nicht verwenden, können Sie einfach das ganze Bundle statt der JAR-Datei einzeln herunterladen.

Gehen Sie http://hibernate.org/orm/downloads/ und laden Sie die neueste Bibliothek, extrahieren Sie das Glas aus dem Ordner required.

1

Wenn jemand Maven verwendet, müssen Sie die Abhängigkeit in der POM.XML-Datei hinzufügen. Die neueste Version, wie dieser Beitrag ist unter:

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

In neueren Hibernate Gläser, können Sie die gewünschte JPA-Datei unter „hibernate-search-5.8.0.Final \ dist \ lib \ bereitgestellt finden \ hibernate- JPA -2.1-api-1.0.0.Final ". Sie müssen diese JAR-Datei in Ihren Projekt-Java-Build-Pfad einfügen. Dies wird höchstwahrscheinlich das Problem lösen.