Aucun fournisseur de Persistance pour l'EntityManager nommé X
Je suis en train d'élaborer un JavaSE application utilisant JPA. Malheureusement, je me null
après l'appel:
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
Ci-dessous vous trouverez:
- Un extrait de mon code qui appelle
EntityManagerFactory
et inattendue renvoienull
- Mon
persistence.xml
fichier - Mon projet de structure
Extrait de mon code:
public class Main {
private static final String PERSISTENCE_UNIT_NAME = "MeineJpaPU";
private static EntityManagerFactory factory;
public static void main(String[] args) {
//I get null on this line!!!
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
//do stuff with entity manager
...
}
}
Mon persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
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">
<persistence-unit name="MeineJpaPU" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>path.to.package.server.Todo</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test"/>
<property name="javax.persistence.jdbc.user" value="postgres"/>
<property name="javax.persistence.jdbc.password" value="postgres"/>
</properties>
</persistence-unit>
</persistence>
Mon projet structure:
OriginalL'auteur joshi737 | 2013-10-11
Vous devez vous connecter pour publier un commentaire.
Vous devez déplacer
persistence.xml
fichier à un emplacement approprié.Plus précisément, ajouter
META-INF/persistence.xml
fichier à la racine d'un dossier source.Dans ce cas, la suite est un endroit approprié:
src\main\java\META-INF\persistence.xml
Voici les détails:
(prises à partir de la JPA spec)
La racine de l'unité de persistance est la clé ici.
Si vous êtes un non-Java EE app
Si vous êtes dans un Java EE app, les suivants sont valides
OriginalL'auteur cmd
Des conseils rapides:
Avec l'utilisation de JPA en 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:
<provider>org.hibernate.ejb.HibernatePersistence</provider>
(comme décrit dans la réponse correcte par Chris ici: https://stackoverflow.com/a/1285436/784594)Dans mon cas, j'ai trouvé que, en raison de mauvaise configuration de maven, hibernate-entitymanager.jar n'était pas une dépendance, même si c'était un transitoire de la dépendance de l'autre module.
Voir aussi les réponses ici: Aucun fournisseur de Persistance pour l'EntityManager nommé
OriginalL'auteur OndrejM
J'ai récemment mis à jour NB 8.1 8.2 et soudain confrontés à ce problème et a passé 2 jours à me casser la tête à résoudre. Jusqu'à 8.1, la suppression processorpath (mentionné ci-dessus par d'autres). Avec 8.2, le problème a persisté.
Enfin, j'ai trouvé que le eclipselink.jar est manquant dans la bibliothèque par défaut de EclipseLink (JPA 2.1). J'ai ajouté le fichier à la définition de la bibliothèque et voila, il a commencé à travailler!
OriginalL'auteur Prerak Sheth
Donc dans mon cas, tout était dans le chemin de classe, mais j'ai dû ajouter
Class c = Class.forName("org.eclipse.la persistance.jpa.PersistenceProvider");
Je pense que cela a provoqué la PersistenceProvider à s'inscrire avec le javax classes. J'ai eu à faire quelque chose de similaire pour les pilotes JDBC dans le passé.
OriginalL'auteur RLZaleski
Si vous ne souhaitez pas déplacer votre répertoire META-INF (peut-être parce que c'est là que votre IDE l'a créé et vous ne voulez pas de confondre), et si vous utilisez Maven, vous pouvez indiquer à Maven où chercher pour les META-INF à l'aide de la
<resources>
tag. Voir: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.htmlDans votre cas:
OriginalL'auteur esfandia
Ne pas donner JPA dépendance explicitement
Merci,
Rahul
OriginalL'auteur rahulnikhare