2011-10-18 15 views
26

Estoy tratando de configurar un proyecto simple jpa 2.0 siguiendo la información en Hibernate EntityManager documentation. He estado en esto durante horas, pero no importa lo que hago yo siempre consigo esta excepción cuando intento crear un EntityManagerFactory:JPA 2.0 utilizando Hibernate como proveedor - Excepción: No proveedor de persistencia para 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) 

he encontrado algunas preguntas muy similares con respecto a esta excepción, pero no hay soluciones que pueda llegar a trabajar. ¿Qué estoy haciendo mal aquí?

estructura de directorios

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

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

mi 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(); 
    } 
} 

Respuesta

45

Tal vez se le pasa la clase de Proveedores o una de sus dependencias en sus dependencias pom.xml?

El enlace que da a los documentos de hibernación dice que es recomendable añadir

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

a su pom.xml

+4

No es nada embarazoso, ese mensaje de error es singularmente inútil (se aplica a toda una serie de problemas). –

+5

Me gustaría agregar que esta dependencia debería reemplazar al 'hibernate-core', no solo agregarse al lado, porque de hecho ya incluye' hibernate-core'.Consulte la lista de dependencias de Maven en Hibernate [página de descargas] (http://hibernate.org/orm/downloads/). Dicen explícitamente que 'para JPA, use hibernate-entitymanager en lugar de hibernate-core'. – jFrenetic

+0

No estaba usando maven, así que resolví esto agregando hibernate-entity-manager.jar (que se encuentra en el directorio dist \ lib \ optional \ jpa en hibernate 5.5.2 zip), y luego descargando y agregando jta-1.1. tarro –

1

persistence.xml está destinado a estar presente en el directorio META-INF y META INF está destinado a estar presente en el classpath de la aplicación que es la carpeta src.

Según su estructura de carpetas está presente en la carpeta de recursos, intente moverlo a classpath sholud work.

0

Tengo este problema resuelto usando las siguientes dependencias y al siguiente proveedor:

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

es el último no funciona como Versión para usted, usted puede utilizar 1.0.1.Final de hibernación-jpa- 2,0-api y 5.2.5.Final de hibernación-EntityManager

Además, en persistence.xml, no se olvide de propiedades hbm2dll.auto (esto fue un problema he pasado algún tiempo pensando)

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

Luego realice una instalación de maven clean

Cuestiones relacionadas