Aucun fournisseur de persistance pour EntityManager nommé

J'ai ma persévérance.xml avec le même nom, en utilisant toplink, sous le répertoire META-INF. Ensuite, j'ai mon code qui l'appelle avec:

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

Pourtant, j'ai reçu le message d'erreur suivant

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)

Voici la persistance.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>

Il aurait dû être dans le classpath. Pourtant, j'ai l'erreur ci-dessus.

126
demandé sur Paolo Forgia 2009-07-21 13:29:09

25 réponses

Après <persistence-unit name="agisdb">, Définissez le nom du fournisseur de persistance:

<provider>org.hibernate.ejb.HibernatePersistence</provider>
79
répondu Dave Jarvis 2016-06-20 03:14:54

Mettre les "hibernate-entitymanager.jar" dans le classpath de l'application.
Pour les versions plus récentes, vous devez utiliser "hibernate-core.jar" au lieu de hibernate-entitymanager

Si vous utilisez un IDE, comme Eclipse: Project Properties -> Java Build Path -> Libraries.

Sinon mettez-le dans le /lib de votre application.

83
répondu Ualter Jr. 2017-06-29 13:39:59

Assurez-vous que le persistence.xml fichier est dans le répertoire: <webroot>/WEB-INF/classes/META-INF

63
répondu user225932 2016-06-23 08:01:39

J'en avais besoin dans mon pom.fichier xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.6.Final</version>
</dependency>
16
répondu technocrat 2013-10-20 02:55:35

A fait face au même problème et n'a pas pu trouver de solution pendant assez longtemps. Dans mon cas, cela a aidé à remplacer

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

Avec

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

A Pris la solution de ici

10
répondu Sneg 2017-05-23 12:34:45

Peut-être avez-vous défini un fournisseur comme <provider>org.hibernate.ejb.HibernatePersistence</provider> mais en référençant un autre dans jar. C'est arrivé avec moi: ma persistance.le fournisseur xml était openjpa mais j'utilisais eclipselink dans mon classpath. Espérons que cette aide!

9
répondu Gilberto 2010-05-13 20:33:22

Il y a un autre point: si vous rencontrez ce problème dans un environnement Eclipse RCP, vous devrez peut-être changer la génération D'usine de Persistence.createEntityManagerFactory à new PersistenceProvider().createEntityManagerFactory

Voir ECF pour une discussion détaillée à ce sujet.

9
répondu col.panic 2016-12-13 14:48:39

Conseils Rapides:

  • Vérifiez si la persistance.xml est dans votre classpath
  • Vérifiez si le fournisseur hibernate est dans votre classpath

Avec l'utilisation de JPA dans une application autonome (en dehors de JavaEE), un fournisseur de persistance doit être spécifié quelque part. Cela peut être fait de deux façons que je connais:

Dans mon cas, j'ai découvert qu'en raison d'une mauvaise configuration de maven, hibernate-entitymanager jar n'était pas inclus en tant que dépendance, même si c'était une dépendance transitoire d'un autre module.

6
répondu OndrejM 2017-05-23 12:34:45

Si vous utilisez Eclipse, assurez-vous que le modèle d'exclusion ne supprime pas votre persistence.xml des dossiers source sur le chemin de construction.

  1. allez dans propriétés - > chemin de construction Java - > source tab
  2. vérifiez votre modèle d'exclusion qui se trouve à
    MyProject/src/main/java -> Excluded: <your_pattern>
    noeud d'arbre
  3. Éventuellement, mettre Excluded: (None) en sélectionnant le nœud et en cliquant sur Modifier... bouton sur la gauche.
5
répondu wypieprz 2013-09-06 15:05:27

Corner case: si vous utilisez m2Eclipse, il place automatiquement les exclusions sur vos dossiers de ressources. Ensuite, lorsque vous essayez d'exécuter des tests dans eclipse, l'absence subséquente de persistance.xml produira cette erreur.

4
répondu Rob 2010-06-25 17:26:27

Assurez-vous que vous avez créé la persistance.fichier xml sous le dossier' src'. J'ai créé sous le dossier du projet et c'était mon problème.

3
répondu harcharan 2011-11-27 03:59:20

Cela se produit lorsque le gestionnaire d'entité essaie de pointer vers de nombreuses unités de persistance. Procédez comme suit:

  1. Ouvrez le fichier associé dans votre éditeur (à condition que votre projet ait été fermé dans votre IDE)
  2. supprime tout le code associé à la persistance et au gestionnaire d'entités
  3. Enregistrer le fichier
  4. Ouvrez le projet dans votre IDE
  5. maintenant, liez la base de données ou la table de votre choix
2
répondu mahesh 2013-03-06 00:17:30

J'ai rencontré le MÊME PROBLÈME, MAIS sur EclipseLink version 2.5.0 .

J'ai résolu mon problème en ajoutant encore un autre fichier jar qui était nécessairement (javax.persistence_2.1.0.v201304241213.pot.pot);

Pots nécessaires:
- javax.persistence_2.1.0.v201304241213.jar
- eclipselink.jar
- jdbc.jar (en fonction de la base de données utilisée).

J'espère que cela aide.

2
répondu E_X 2014-04-13 12:10:53

, j'ai aussi eu cette erreur mais le problème est l'uri d'espace de noms dans le persistence.xml.

J'ai remplacé http://xmlns.jcp.org/xml/ns/persistence à http://java.sun.com/xml/ns/persistence et la version 2.1 à 2.0.

Ça marche maintenant.

2
répondu Ludovic Guillaume 2014-04-25 08:30:27

Vous devez ajouter le hibernate-entitymanager-x.jar dans le classpath.

Dans Hibernate 4.x, si le pot est présent, alors pas besoin d'ajouter de l'org.hiberner.ejb.HibernatePersistence dans la persistance.fichier xml.

2
répondu vijayinani 2014-05-25 19:36:20

La question a déjà été répondue, mais je voulais juste poster un pourboire qui me retenait. Cette exception a été levée après des erreurs précédentes. Je recevais ceci:

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

Même si j'avais changé la persistance.xml pour inclure le nouveau nom de propriété:

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

Suite au message sur le nom de propriété obsolète, j'obtenais la même PersistenceException comme ci-dessus et toute une autre chaîne d'exceptions. Mon conseil: assurez-vous de vérifier le début de la saucisse d'exception.

Il semble y avoir un bug dans Glassfish v2.1.1 où les redéploiements ou les undeploys et les déploiements ne mettent pas à jour la persistance.xml, qui est mis en cache quelque part. J'ai dû redémarrer le serveur, puis cela a fonctionné.

1
répondu Rónán Ó Braonáin 2011-05-12 09:25:32

Dans un contexte OSGi, il est nécessaire de lister vos unités de persistance dans le Manifeste du bundle.MF, par exemple

JPA-PersistenceUnits: my-persistence-unit

Sinon, le bundle JPA ne saura pas que votre bundle contient des unités de persistance.

Voir http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE .

1
répondu schieferstapel 2012-10-18 09:34:34

Vous avez besoin des fichiers jar suivants dans le classpath:

  1. antlr-2.7.6.jar
  2. commons-collections-3.1.jar
  3. dom4j-1.6.1.jar
  4. hibernate-commons-annotations-4.0.1.Final.jar
  5. hibernate-core-4.0.1.Final.jar
  6. hibernate-entitymanager.jar
  7. hibernate jpa-2.0-api-version 1.0.0.Final.jar
  8. javassist-3.9.0.jar
  9. jboss-logging-3.1.1.GA.jar
  10. jta-1.1.jar
  11. slf4j-api-1.5.8.pot
  12. xxx-JDBC-pilote.jar
1
répondu yeafee 2013-06-29 12:36:06

Je viens de copier le META-INF dans src et j'ai travaillé!

1
répondu Zakaria Bouazza 2014-05-27 09:11:57

Hiberner 5.2.5
Fichiers Jar requis dans le chemin de la classe. Ceci est dans un dossier requis de Hibernate 5.2.5 version finale. Il peut être téléchargé à partir de http://hibernate.org/orm/downloads/

  1. antlr-2.7.7
  2. cdi-api 1.1
  3. camarade de classe-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.Finale
  8. hibernate-core-5.2.5.Finale
  9. hibernate jpa-2.1-api-version 1.0.0.Finale
  10. jandex-2.0.3.Finale
  11. javassist-3.20.0-GA
  12. javax.injecter-1
  13. JBoss-interceptor-api_1. 1_spec-1.0.0.Beta1
  14. JBoss-logging-3.3.0.Finale
  15. jsr250-api-1.0

Créer un fichier xml fichier "persistance.xml" dans

Votreprojet/src/META-INF/persistance.xml

Persistance.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. Veuillez noter que les informations mentionnées dans la balise et la version doivent être 2.1.
  2. veuillez noter que le nom balise, le nom est mentionné comme "échantillon". Ce nom doit être utilisé exactement de la même manière lors du chargement de votre

EntityManagerFactor = La Persistance.createEntityManagerFactory("exemple");. "sample" peut être modifié selon votre convention de nommage.

Créez maintenant une classe D'entité. avec le nom selon mon exemple UserDetail, dans le paquet org.pramod.données.objet

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 + "]";
    }
}

Créez maintenant une classe avec la méthode principale.

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

    }

}

La sortie sera

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
1
répondu Prayag Sharma 2016-12-06 11:53:33

Si vous utilisez Maven, il se peut qu'il ne regarde pas au bon endroit pour le dossier META-INF. D'autres ont mentionné la copie du dossier, mais une autre façon qui a fonctionné pour moi était de dire à Maven où le chercher, en utilisant la balise <resources>. Voir: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

1
répondu esfandia 2016-12-15 08:32:51

Je suis quelques années en retard à la fête ici mais j'ai frappé la même exception en essayant D'obtenir Hibernate 3.5.1 travailler avec HSQLDB et un programme JavaFX de bureau. Je l'ai eu à travailler avec l'aide de ce fil et beaucoup d'essais et d'erreurs. Il semble que vous obtenez cette erreur pour toute une variété de problèmes:

No Persistence provider for EntityManager named mick

J'ai essayé de construire les exemples du tutoriel hibernate mais parce que J'utilisais Java 10, Je n'ai pas pu les construire et les exécuter facilement. J'ai renoncé à cela, ne voulant pas vraiment perdre de temps résoudre ses problèmes. Configuration d'un module-info.fichier java (Jigsaw) est une autre boule de poils beaucoup de gens n'ont pas encore découvert.

Un peu déroutant est que ceux-ci (ci-dessous) étaient les deux seuls fichiers dont j'avais besoin dans ma construction.fichier gradle. La documentation Hibernate n'est pas claire sur les Jars que vous devez inclure. Entity-manager causait de la confusion et n'est plus nécessaire dans la dernière version D'Hibernate, et javax non plus.la persistance de l'api. Note, j'utilise Java 10 ici donc je devais incluez l'api JAXB, pour contourner certaines erreurs xml-bind, ainsi que pour ajouter une entrée pour le module de persistance java dans mon module-info.fichier java.

Construire.gradle

// https://mvnrepository.com/artifact/org.hibernate/hibernate-core
compile('org.hibernate:hibernate-core:5.3.1.Final')

// https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'

Module-info.java

// Used for HsqlDB - add the hibernate-core jar to build.gradle too
requires java.persistence;

, Avec hibernate 5.3.1 vous n'avez pas besoin de spécifier le fournisseur, ci-dessous, dans votre persistance.fichier xml. Si l'un N'est pas fourni, le fournisseur Hibernate est choisi par défaut.

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

La persistance.xml fichier doit être situé dans le répertoire correct donc:

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

Parcourir le code source hibernate dans le débogueur Intellij, où il vérifie un dialecte, a également jeté la même exception exacte, en raison d'une propriété dialecte manquante dans la persistance.fichier xml. J'ai ajouté ceci (ajoutez le bon pour votre type de base de données):

<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>

J'ai toujours eu la même exception après cela, donc en parcourant à nouveau le débogueur dans Intellij, j'ai révélé que l'entité de test que j'essayais de persister (exemple simple parent-enfant) avait des annotations manquantes pour l'OneToMany, ManyToOne relations. J'ai corrigé cela et l'exception a disparu et mes entités ont été persistées ok.

Voici ma persistance finale complète.xml:

<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="mick" transaction-type="RESOURCE_LOCAL">
    <description>
        Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
    </description>

    <!-- Provided in latest release of hibernate
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    -->

    <class>com.micks.scenebuilderdemo.database.Parent</class>
    <class>com.micks.scenebuilderdemo.database.Child</class>

    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver"/>

        <property name="javax.persistence.jdbc.url"
                  value="jdbc:hsqldb:file:./database/database;DB_CLOSE_DELAY=-1;MVCC=TRUE"/>

        <property name="javax.persistence.jdbc.user" value="sa"/>
        <property name="javax.persistence.jdbc.password" value=""/>

        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="create"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
    </properties>

</persistence-unit>

</persistence>

J'ai probablement perdu environ une demi-journée sur ce bijou. Mon conseil serait de commencer très simple - une seule entité de test avec un ou deux champs, car il semble que cette exception puisse avoir de nombreuses causes.

1
répondu MickG 2018-06-24 15:31:23

S'il y a des noms différents dans Persistence.createEntityManagerFactory("JPAService") dans différentes classes que vous obtenez l'erreur. en refactorisant il est possible d'obtenir différents noms ce qui était dans mon cas. Dans une classe, la Persistence.createEntityManagerFactory("JPAService")générée automatiquement dans private void initComponents(), La classe ContactsTable différait de Persistence.createEntityManagerFactory("JPAServiceExtended") dans la classe DBManager.

0
répondu burseaner 2014-10-02 10:25:27

Le mien a été résolu en ajoutant des informations dans la persistance.xml par exemple <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>, puis en vous assurant que vous avez la bibliothèque sur classpath par exemple dans Maven add dependency comme

<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>eclipselink</artifactId>
  <version>2.5.0</version>
</dependency>
0
répondu Dhwaneel 2018-07-04 06:38:16

Vérifiez le nom de l'unité péristante

<persistence-unit name="com.myapp.model.jpa"
    transaction-type="RESOURCE_LOCAL">    
public static final String PERSISTENCE_UNIT_NAME = "com.myapp.model.jpa";
Persistence.createEntityManagerFactory(**PERSISTENCE_UNIT_NAME**);
0
répondu AtulJain 2018-09-26 08:28:50