it-swarm.com.de

JPA 2.0 mit Hibernate als Anbieter - Ausnahme: Kein Persistenzanbieter für EntityManager

Ich versuche, ein einfaches jpa 2.0-Projekt einzurichten, indem ich die Informationen im Hibernate EntityManager documentation befolge. Ich bin schon seit Stunden dabei, aber egal was ich mache, ich bekomme immer diese Ausnahme, wenn ich versuche, eine EntityManagerFactory zu erstellen:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named manager1
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.Java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.Java:32)
    at se.mycomp.UserTest.main(UserTest.Java:9)

Ich habe einige ähnliche Fragen zu dieser Ausnahme gefunden, aber keine Lösungen, die ich zur Arbeit bringen kann. Was mache ich hier falsch?

Verzeichnisaufbau

.
├── pom.xml
└── src
    ├── main
    │   ├── Java
    │   │   └── se
    │   │       └── mycomp
    │   │           ├── UserTest.Java
    │   │           └── domain
    │   │               └── User.Java
    │   └── resources
    │       ├── META-INF
    │       │   └── persistence.xml
    │       └── log4j.properties
    └── test
        └── Java

mein persistence.xml

<persistence xmlns="http://Java.Sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://Java.Sun.com/xml/ns/persistence http://Java.Sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>se.mycomp.domain.User</class> 
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>

            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/test"/>
            <property name="javax.persistence.jdbc.user" value="test"/>
            <property name="javax.persistence.jdbc.password" value="1234"/>
        </properties>
    </persistence-unit>
</persistence>

mein pom.xml

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>se.lil.tryjpa</groupId>
<artifactId>try-jpa</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <hibernate-core.version>3.6.4.Final</hibernate-core.version>
    <mysql-connector-Java.version>5.1.16</mysql-connector-Java.version>
    <slf4j.version>1.6.1</slf4j.version>
    <log4j.version>1.6.1</log4j.version>
</properties>

<dependencies>
    <!-- HIBERNATE DEPENDENCIES -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate-core.version}</version>
    </dependency>

    <!-- MYSQL DEPENDENCIES -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
        <version>${mysql-connector-Java.version}</version>
    </dependency>

    <!-- Logging Dependencies -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${log4j.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <optimize>true</optimize>
                <debug>true</debug>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-Eclipse-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <downloadSources>true</downloadSources>
            </configuration>
        </plugin>
    </plugins>
</build>

UserTest.Java

public class UserTest {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
        EntityManager em = emf.createEntityManager();
    }
}
26
Holm

Vermissen Sie die Provider-Klasse oder eine ihrer Abhängigkeiten in Ihren pom.xml-Abhängigkeiten?

Der Link, den Sie zu den Hibernate-Dokumenten geben, bedeutet, dass Sie auch hinzufügen sollten

<project ...>
  ...
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>${hibernate-core-version}</version>
    </dependency>
  </dependencies>
</project>

zu Ihrem pom.xml

45
Henk de Vries

persistence.xml soll im META-INF-Verzeichnis vorhanden sein und META-INF im Klassenpfad der Anwendung, die sich im Ordner "src" befindet.

Versuchen Sie es entsprechend Ihrer Ordnerstruktur im Ressourcenordner in den Klassenpfad zu verschieben, in dem es funktioniert.

1

Dieses Problem wurde mithilfe der folgenden Abhängigkeiten und des folgenden Providers gelöst:

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>


 <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1200-jdbc41</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>LATEST</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>LATEST</version>
</dependency>

ist LATEST nicht als Version für Sie funktionsfähig, können Sie 1.0.1.Final für hibernate-jpa-2.0-api und 5.2.5.Final für Hibernate-entitymanager verwenden

Vergessen Sie in persistence.xml auch nicht die Eigenschaften von hbm2dll.auto (dies war ein Problem, das ich einige Zeit damit verbracht habe, herauszufinden).

<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.show_sql" value="true"/>

Dann machen Sie eine saubere Installation

0
moldovean