2009-07-21 18 views
121

Tengo mi persistence.xml con el mismo nombre, utilizando toplink, en el directorio META-INF. entonces tengo mi código llamándola con ...No proveedor de persistencia para EntityManager llamado

EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb"); 

Sin embargo, me dieron el siguiente mensaje de error

 
2009-07-21 09:22:41,018 [main] ERROR - No Persistence provider for EntityManager named agisdb 
javax.persistence.PersistenceException: No Persistence provider for EntityManager named agisdb 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60) 

Aquí está el persistence.xml ...

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> 
    <persistence-unit name="agisdb"> 
     <class>com.agis.livedb.domain.AddressEntity</class> 
     <class>com.agis.livedb.domain.TrafficCameraEntity</class> 
     <class>com.agis.livedb.domain.TrafficPhotoEntity</class> 
     <class>com.agis.livedb.domain.TrafficReportEntity</class> 
     <properties> 
      <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/> 
      <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="toplink.jdbc.user" value="root"/> 
      <property name="toplink.jdbc.password" value="password"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Debería haber estado en el classpath ... Sin embargo, recibí el error anterior ... Realmente agradezco cualquier ayuda ... Gracias

Respuesta

74

Después , definir el nombre del proveedor de persistencia:

<provider>org.hibernate.ejb.HibernatePersistence</provider> 
+4

estoy usando Derby y que no era necesario especificar esto (lo hice, pero luego se lo quitó una vez que resolví el problema, solo para asegurarme). Obtuve el error finalmente porque persistence.xml no estaba en la carpeta src/META-INF, a pesar de que había estado en una carpeta en la ruta de origen de Eclipse para el proyecto. Estoy pensando en algún lugar que está cableado para estar en src/* – Fuhrmanator

+5

** esto no fue necesario en mi caso, pero * classpathing * hibernate-entitymanager * .jar ** como se indica en la * respuesta de * Ualter Jr * a continuación. Estoy usando una aplicación GWT independiente con * hibernate-core-4.3.7.jar *, * hibernate-entitymanager-4.3.7.Final.jar * y * hibernate-jpa-2.1-api-1.0.0.jar *. –

+1

Lo mismo con @AndreasDietrich, después de reemplazar el artefacto "hibernate-core-4.3.10" con "hibernate-entitymanager-4.3.10" en pom.xml (uso maven), este error desapareció. En realidad, http://hibernate.org/orm/downloads/ dice que debe usar "hibernate-entitymanager-4.3.10" para JPA. – Hong

61

Asegúrese de que el archivo persistence.xml está en el directorio: <webroot>/WEB-INF/classes/META-INF

+6

esto no funcionó para mí, trajo la unidad de persistencia no encontrada: error 'nulo'. Volviendo a /src/main/resources/META-INF/persistence.xml – tomasb

+1

Supongo que esto se aplica a quienes usan ** toplink ** (u otras cosas relacionadas con la web), para todos los demás, otras respuestas aquí pueden ser más apropiado. –

+1

Gracias, para mí el camino es target/classes/META-INF – Frizz1977

9

Tal vez definido un proveedor como <provider>org.hibernate.ejb.HibernatePersistence</provider> pero hace referencia a otro en jarra. Eso sucedió conmigo: mi proveedor persistence.xml era openjpa pero estaba usando eclipselink en mi classpath. Espero que esta ayuda!

4

Caso de esquina: si está utilizando m2Eclipse, coloca automáticamente excluye en sus carpetas de recursos. Luego, cuando intente ejecutar pruebas dentro de Eclipse, la posterior ausencia de persistence.xml producirá este error.

2

Se produce cuando el administrador de la entidad intenta señalar muchas unidades de persistencia. Siga los siguientes pasos:

  1. abrir el archivo relacionado con su editor (siempre que su proyecto se ha cerrado en su IDE)
  2. eliminar todo el código relacionado gestor de persistencia y la entidad
  3. guardar el archivo
  4. abrir el proyecto en el IDE
  5. ahora obligar a la db o mesa de su elección
82

Coloque el "hibernate-entitymanager.jar" en el classpa th de aplicación.
Para las versiones más recientes, se debe utilizar en lugar de la "hibernate-core.jar" obsoleta hibernate-entitymanager

Si está ejecutando a través de algún IDE, como Eclipse : Project Properties -> Java Build Path -> Libraries.

De lo contrario lo puso en el /lib de su aplicación.

+3

Me llevó unas horas imaginar que esta era la causa. Para otras personas que buscan este jarro sangriento, en el caso de Hibernate 4.1.3, está en hibernate-release-4.1.3.Final \ lib \ jpa \ hibernate-entitymanager-4.1.3.Final.jar – Vedran

+7

Y para aquellos de nosotros que están usando Maven, eso sería groupid 'org.hibernate' artifactid' hibernate-entitymanager' –

+2

Ha sido eclipselink.jar para mí, que faltaba en la ruta. No hibernate * something.jar en el camino en absoluto. –

1

La pregunta ya ha sido respondida, pero solo quería publicar un consejo que me estaba deteniendo. Esta excepción se lanzó después de errores previos. Estaba obteniendo esto:

property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead. 

Aunque había cambiado la persistencia.xml para incluir el nuevo nombre de la propiedad:

<property name="toplink.target-database" value="oracle.toplink.platform.database.oracle.Oracle10Platform"/> 

Siguiendo el mensaje sobre el nombre de la propiedad en desuso que estaba recibiendo la misma PersistenceException como la de arriba y la otra toda una serie de excepciones. Mi consejo: asegúrese de verificar el comienzo de la salchicha de excepción.

Parece que hay un error en Glassfish v2.1.1 donde las redespliegues o anulaciones e implementaciones no actualizan el archivo persistence.xml, que se almacena en caché en algún lugar. Tuve que reiniciar el servidor y luego funcionó.

9

hay otro punto: Si se enfrenta a este problema dentro de un entorno Eclipse RCP, puede que tenga que cambiar la generación de fábrica de Persistence.createEntityManagerFactory a new PersistenceProvider().createEntityManagerFactory

ver ECF para una discusión detallada sobre esto.

+0

Este era el problema exacto que estaba teniendo con org.eclipse.persistence.jpa 2.4.0. Literalmente pasé 2 horas tirando de mi cabello preguntándome por qué no podía encontrar mi persisence.xml. Todos los ejemplos no parecen incorporar esto. oh bueno ... muchas muchas gracias! –

3

Asegúrese de haber creado el archivo persistence.xml en la carpeta 'src'. Creé en la carpeta del proyecto y ese era mi problema.

+0

Eclipse 4.4.0 no quiere anidar las carpetas de SRC, así que estaba poniendo META-INF en el nivel superior, pensando que persistence.xml en el classpath sería adecuado. ¡NO! Tuve que crear manualmente un src/META-INF (en el sistema operativo) y mover el archivo persistence.xml a mano. Quizás es posible hacer esto en Eclipse, pero no pude resolverlo. – Fuhrmanator

1

se necesitan los siguientes archivos jar en la ruta de clase:

  1. antlr-2.7.6.jar
  2. Commons-collections-3.1.jar
  3. dom4j-1.6.1.jar
  4. hibernate-Commons-anotaciones-4.0.1.Final.jar
  5. hibernación-core-4.0.1.Final.jar
  6. hibernación-entitymanager.jar
  7. hibernación-JPA-2,0-api-1.0.0.Final.jar
  8. javassist-3.9.0.jar
  9. jboss-tala-3.1.1.GA.jar
  10. jta-1.1.jar
  11. slf4j-api-1.5.8.jar
  12. xxx-JDBC-driver.jar
5

Si está utilizando Eclipse asegúrese de que el patrón de exclusión no elimina su persistence.xml de carpetas de origen en la acumulación camino.

  1. Ir a Propiedades -> Java Build Path -> Fuente pestaña
  2. Compruebe el patrón de exclusión que se encuentra en
    MyProject/src/main/java -> Excluded: <your_pattern>
    nodo del árbol
  3. Opcionalmente, configurarlo para que Excluded: (None) seleccionando el nodo y haciendo clic en Editar ... botón a la izquierda.
+0

Resolvió mi problema. El patrón excluido se configuró en "**" después de una búsqueda/extracción. No sé por qué ... – Jocelyn

15

Necesitaba esto en mi archivo pom.xml:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>4.2.6.Final</version> 
</dependency> 
+0

Funciona para la versión 4.3.11. – okwap

+0

Está en desuso, ver arriba. Use hibernate-core en su lugar. – foo

6

consejos rápida:

  • verificación si persistence.xml está en la ruta de clases
  • de verificación si el proveedor está en hibernación su classpath

Con usar JPA en soporte sola aplicación (fuera de JavaEE), un proveedor de persistencia necesita ser especificado en alguna parte. Esto se puede hacer de dos maneras, que yo sepa:

En mi caso, he encontrado que debido a una mala configuración experta , jar hibernate-entitymanager no fue incluido como una dependencia, incluso si era una dependencia transitoria de otro módulo.

+0

/facepalm - Olvidé agregar la dependencia de maven para el proveedor de hibernación. ¡Gracias! – jgitter

2

Me enfrenté al mismo problema, pero en EclipseLink version 2.5.0.

Resolví mi problema añadiendo otro archivo jar que era necesariamente (javax.persistence_2.1.0.v201304241213.jar.jar);

tarros necesarios:
- javax.persistence_2.1.0.v201304241213.jar
- eclipselink.jar
- jdbc.jar (dependiendo de la base de datos utilizada).

Espero que esto ayude.

2

También tuve este error pero el problema era el espacio de nombres uri en el persistence.xml.

He sustituido http://xmlns.jcp.org/xml/ns/persistence a http://java.sun.com/xml/ns/persistence y la versión 2.1 a 2.0.

Ahora está trabajando.

+0

Eso es exactamente lo que sucedió con Tomcat .. Acabo de agregar un encabezado completo para aclarar a los usuarios nuevos –

2

Debe agregar hibernate-entitymanager-x.jar en classpath.

En Hibernate 4.x, si el contenedor está presente, entonces no es necesario agregar org.hibernate.ejb.HibernatePersistence en el archivo persistence.xml.

1

Acabo de copiar el META-INF en src y funcionó!

0

Si hay diferentes nombres en Persistence.createEntityManagerFactory("JPAService") en clases diferentes a las que obtiene el error. Al refactorizar es posible obtener diferentes nombres que estaban en mi caso. En una clase, el Persistence.createEntityManagerFactory("JPAService") autogenerado en private void initComponents(), la clase ContactsTable difería de Persistence.createEntityManagerFactory("JPAServiceExtended") en la clase DBManager.

0

Hibernate 5.2.5
Jar Archivos Necesarios en la ruta de clase. Esto está dentro de una carpeta requerida de la versión final de Hibernate 5.2.5. Se puede descargar desde http://hibernate.org/orm/downloads/

  1. antlr-2.7.7
  2. cdi-API-1.1
  3. compañero-1.3.0
  4. dom4j-1.6.1
  5. el-API-2.2
  6. geronimo-jta_1.1_spec-1.1.1
  7. hibernate-commons-annotation-5.0.1.Final
  8. hibernate-core-5.2.5.Final
  9. hibernate-jpa-2.1-api-1.0.0.Final
  10. jandex-2.0.3.Final
  11. javassist-3.20.0-GA
  12. javax.inject-1
  13. jboss-interceptor -api_1.1_spec-1.0.0.Beta1
  14. jboss-logging-3.3.0.Final
  15. jsr250-api-1,0

crear un archivo XML "persistence.xml" en

YourProject/src/META-INF/persistence.xml

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
     http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
     version="2.1"> 

<persistence-unit name="sample"> 

    <class>org.pramod.data.object.UserDetail</class> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
    <properties> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
     <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_project"/> 
     <property name="hibernate.connection.username" value="root"/> 
     <property name="hibernate.connection.password" value="root"/> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="false"/> 

     <property name="hibernate.cache.use_second_level_cache" value="false"/> 

     <property name="hibernate.archive.autodetection" value="true"/> 
    </properties> 
</persistence-unit> 

  1. favor anotar la información mencionada en el < persistencia> la etiqueta y la versión deberían ser 2.1.
  2. tenga en cuenta el nombre < persistance-unit> etiqueta, el nombre se menciona como "muestra". Este nombre se debe utilizar exactamente el mismo durante la carga de su

EntityManagerFactor = Persistance.createEntityManagerFactory ("muestra");. "muestra" se puede cambiar según su convención de nomenclatura.

Ahora crea una clase Entity. con el nombre de acuerdo con mi ejemplo UserDetail, en el paquete org.pramod.data.object

UserDetail.java

package org.pramod.data.object; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "user_detail") 
public class UserDetail { 
    @Id 
    @Column(name="user_id") 
    private int id; 
    @Column(name="user_name") 
    private String userName; 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getUserName() { 
     return userName; 
    } 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
    @Override 
    public String toString() { 
     return "UserDetail [id=" + id + ", userName=" + userName + "]"; 
    } 
} 

A continuación, cree una clase con el método principal.

HibernateTest.java

package org.pramod.hibernate; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import org.pramod.data.object.UserDetail; 

public class HibernateTest { 
    private static EntityManagerFactory entityManagerFactory; 

    public static void main(String[] args) { 
     UserDetail user = new UserDetail(); 
     user.setId(1); 
     user.setUserName("Pramod Sharma"); 

     try { 
      entityManagerFactory = Persistence.createEntityManagerFactory("sample"); 
      EntityManager entityManager = entityManagerFactory.createEntityManager(); 
      entityManager.getTransaction().begin(); 
      entityManager.persist(user); 
      entityManager.getTransaction().commit(); 
      System.out.println("successfull"); 
      entityManager.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

} 

salida será

UserDetail [id=1, userName=Pramod Sharma] 
Hibernate: drop table if exists user_details 
Hibernate: create table user_details (user_id integer not null, user_name varchar(255), primary key (user_id)) 
Hibernate: insert into user_details (user_name, user_id) values (?, ?) 
successfull 
7

Se enfrentó al mismo problema y no pudo encontrar la solución por un tiempo bastante largo. En mi caso ayudó a reemplazar

<provider>org.hibernate.ejb.HibernatePersistence</provider> 

con

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

Tomó solución de here

+0

Estaba actualizando de Hibernate 4.3.5 a 5.2.12 y este cambio de nombre de proveedor me solucionó el problema. Esa configuración parece permitir a JPA utilizar el archivo .jar principal en lugar del archivo .jar de entidad-gestor que se muestra como obsoleto en el repositorio central de Maven. Muchas gracias por compartir. – joshpt

Cuestiones relacionadas