unit persistencia persistencecontext example ejemplo curso archivo java hibernate orm jpa

persistencecontext - javax.persistence.PersistenceException: ningún proveedor de persistencia para EntityManager llamado customerManager



jpa controller (10)

Soy nuevo en JPA & Hibernate. Después de leer algunos materiales en línea, ahora entiendo qué es Hibernate y cómo se puede usar con JPA.

Ahora, estoy intentando ejecutar este tutorial de JPA & Hibernate . He hecho todo lo que mencionan en este tutorial.

No tengo Oracle DB, solo MySQL. Así que realicé algunos cambios en persistence.xml usando mi comprensión de JPA e Hibernate (no sé si es correcto o no ... Parece que sí).

Aquí está 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_1_0.xsd" version="1.0"> <persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>Customer</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="1234"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/> <property name="hibernate.max_fetch_depth" value="3"/> </properties> </persistence-unit> </persistence>

Pero no parece obtener el resultado que describen. Me está dando:

Customer id before creation:null log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named customerManager at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at CustomerDAO.create(CustomerDAO.java:8) at CustomerDAO.main(CustomerDAO.java:22)

Cualquier sugerencia será apreciada.

Actualizar:

Hice los cambios que se solicitan. ¡Pero aún obteniendo las líneas de error de asme!

No mencionaron nada sobre orm.xml en ese tutorial. ¡¡Puede ser un causante de problemas !!!


Estaba enfrentando el mismo problema. Me di cuenta de que estaba usando la clase de proveedor Wrong en persistence.xml

Para Hibernate debería ser

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

Y para EclipseLink debería ser

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>


He visto este error, para mí el problema era que había un espacio en la ruta absoluta de persistance.xml, la eliminación de la misma me ayudó.


Si está utilizando Maven, puede tener tanto src/{main,test}/resources/META-INF/persistence.xml . Esta es una configuración común: pruebe su código JPA con h2 o Derby y despliéguelo con PostgreSQL u otro DBMS completo. Si está utilizando este patrón, asegúrese de que los dos archivos tengan nombres de unidades diferentes , de lo contrario, algunas versiones de la clase Persistence intentarán cargar BOTH (porque, por supuesto, su CLASSPATH de prueba incluye ambas clases y clases de prueba); ¡Esto causará definiciones contradictorias de la unidad de persistencia, dando como resultado el temido mensaje molesto que todos odiamos tanto!

Peor aún: esto puede "funcionar" con algunas versiones anteriores de, por ejemplo, Hibernate, pero falla con las versiones actuales. Vale la pena hacerlo bien de todos modos ...



Solo por completitud. Hay otra situación que causa este error:

falta el archivo META-INF / services / javax.persistence.spi.PersistenceProvider.

Para Hibernate, está ubicado en hibernate-entitymanager-XXX.jar , por lo que si hibernate-entitymanager-XXX.jar no está en su classpath, también obtendrá este error.

Este mensaje de error es tan engañoso y me cuesta horas corregirlo.

Consulte JPA 2.0 utilizando Hibernate como proveedor. Excepción: no hay proveedor de persistencia para EntityManager .


Su persistence.xml no es válido y EntityManagerFactory no se puede crear. Debería ser:

<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_1_0.xsd" version="1.0"> <persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>Customer</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="1234"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/> <property name="hibernate.max_fetch_depth" value="3"/> </properties> </persistence-unit> </persistence>

(Observe cómo los elementos <property> están cerrados, no deben estar anidados)

Actualización: revisé el tutorial y también tendrá que cambiar la estrategia de generación de Id cuando use MySQL (ya que MySQL no admite secuencias). Sugiero usar la estrategia AUTO (por defecto es IDENTIDAD con MySQL). Para hacerlo, elimine la anotación SequenceGenerator y cambie el código como este:

@Entity @Table(name="TAB_CUSTOMER") public class Customer implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="CUSTOMER_ID", precision=0) private Long customerId = null; ... }

Esto debería ayudar.

PD: también debe proporcionar un log4j.properties según lo sugerido.


También estaba enfrentando el mismo problema cuando intentaba configurar el administrador de entidades JPA en Tomcat 8. Primero tengo un problema con la clase SystemException que no se encuentra y, por lo tanto, no se creó entityManagerFactory. Eliminé la dependencia del administrador de entidades de hibernación y luego mi entityManagerFactory no pudo buscar el proveedor de persistencia. Después de pasar por una gran cantidad de investigación y el tiempo se enteró de que el administrador de la entidad hibernate debe buscar alguna configuración. Luego volvió a colocar el jar administrador de entidades y luego agregó JTA Api como una dependencia y funcionó bien.


Tuve el mismo problema hoy. Mi persistence.xml estaba en la ubicación incorrecta. Tuve que ponerlo en la siguiente ruta:

project/src/main/resources/META-INF/persistence.xml


Un poco tarde pero recibí el mismo problema y lo solucioné cambiando la ubicación del esquema en schemaLocation en el archivo persistence.xml (línea 1).


mi experiencia me dice que la falta de persistence.xml generará la misma excepción también.

Cogí el mismo mensaje de error hoy cuando traté de ejecutar un paquete jar empaquetado por hormiga.

cuando utilicé jar tvf para verificar el contenido del archivo jar, me di cuenta de que "hormiga" olvidó empacar el persistnece.xml para mí.

después de volver a empaquetar manualmente el archivo jar, el mensaje de error desapareció.

así que creo que tal vez deberías intentar poner META-INF en el directorio src y colocar tu persistence.xml allí.