2011-10-18 16 views
26

Próbuję skonfigurować prosty projekt jpa 2.0, postępując zgodnie z informacjami zawartymi w produkcie Hibernate EntityManager documentation. Byłem w tej sprawie przez kilka godzin teraz, ale bez względu na to, co robię, zawsze otrzymuję ten wyjątek, gdy próbuję stworzyć EntityManagerFactory:WZP 2.0 przy użyciu dostawcy Hibernate jako dostawcy - wyjątek: Brak dostawcy trwałości dla EntityManager

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) 

mam znaleźć sporo podobnych pytań dotyczących tego wyjątku, ale brak rozwiązań, do których jestem w stanie dotrzeć. Co ja tu robię źle?

struktura katalogów

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

mój 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> 

mój 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(); 
    } 
} 

Odpowiedz

45

Może przegap klasy Provider lub jeden z jego zależnościami w swoich zależnościach pom.xml?

Link dajesz docs stan hibernacji mówi, że należy również dodać

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

do pom.xml

+4

Nie krępujący wcale, ten komunikat o błędzie jest wyjątkowo bezużyteczny (dotyczy całego mnóstwa problemów). –

+5

Chciałbym dodać, że ta zależność powinna zastąpić 'hibernacja-core', a nie tylko dodać ją, ponieważ w rzeczywistości zawiera już' hibernate-core'.Zobacz listę zależności Mavena na stronie Hibernate [download] (http://hibernate.org/orm/downloads/). Mówią wprost, że 'dla JPA, użyj inicjatora hibernacji zamiast hibernacji-core'. – jFrenetic

+0

Nie używałem programu maven, więc rozwiązałem to przez dodanie elementu hibernacji-entity-manager.jar (znajdującego się w katalogu dist \ lib \ optional \ jpa w zipie hibernacji 5.5.2), a następnie przez pobranie i dodanie jta-1.1. słoik –

1

persistence.xml ma być obecny w katalogu META-INF i meta- INF ma być obecny w ścieżce klas aplikacji, która jest folderem src.

Jak na swoją strukturę folderów jest obecna w folderze zasobów, spróbuj przenieść ją do ścieżki classpath to sholud pracy.

0

mam ten problem rozwiązać za pomocą zależności poniżej i następujący dostawcy:

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

to najnowszy nie działa jako wersja dla ciebie, możesz użyć 1.0.1.Final dla hibernacji-jpa- 2,0-api i 5.2.5.Final dla hibernacji-EntityManager

również w persistence.xml, nie zapomnij właściwości hbm2dll.auto (to był jeden problem spędziłem trochę czasu na zastanawianie się)

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

Następnie należy zainstalować czystą instalację