[Maven / Eclipse / JPA / Hibernate] Problème avec le persistence.xml
Bonjour
Eh bien oui, encore une question sur le persistence.xml par un débutant. :calim2: Pour vous rassurer, j'ai cherché par moi-même, dans des bouquins, sur internet, fait des essais mais sans succès.
Contexte
- Utilisation de maven et import dans eclipse du projet créé en ligne de commande.
- Création d'une entity toute simple avec juste des int ou des string (on commence tout doucement)
- Création d'une classe avec un main juste pour tester si je peux écrire en base de donnée
Problème
Le fameux
Citation:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named testPU
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at org.test.Main.main(Main.java:18)
Alors d'après ce que j'ai compris, cette erreur est due au fait que le persistence.xml n'est pas trouvé. Voici donc ce que j'ai tenté:
- mettre le persistence.xml dans src\main\resources\META-INF
- mettre le META-INF dans le classpath eclipse via clic droit sur le projet, properties, java build path, onglet "sources", add folder entity/src/main/resources/META-INF
- j'ai voulu tester en ligne de commande mais je ne suis pas arrivée à générer un jar executable avec maven donc il trouvait pas le main :'(
Au début j'avais regardé dans le détail le contenu du persistence.xml, essayer avec plusieurs, regarder à quoi correspond les différentes déclaration pour me rendre compte que c'était peut être le fichier qui n'était même pas lu...
persistence.xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <?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="testPU">
<properties>
<!--
<property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
-->
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<!-- <property name="hibernate.connection.password" value="<PASSWORD>"/>-->
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/testPU"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="300"/>
<property name="hibernate.c3p0.max_statements" value="50"/>
<property name="hibernate.c3p0.idle_test_period" value="3000"/>
</properties>
</persistence-unit>
</persistence> |
Entity
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
package org.test;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class People implements Serializable{
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
public int id;
public String name;
public int yearBirth;
//
// constructeur par défaut
//
public People() {
}
//
// getters et setters
//
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYearBirth() {
return yearBirth;
}
public void setYearBirth(int yearBirth) {
this.yearBirth = yearBirth;
}
} |
Test de l'entity :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
package org.test;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.test.People;
public class Main {
public static void main(String[] args) {
// Open a database connection
// (create a new database if it doesn't exist yet):
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("testPU");
EntityManager em = emf.createEntityManager();
// Store 5 People objects in the database:
em.getTransaction().begin();
for (int i = 0; i < 5; i++) {
People p = new People();
p.name = "name"+i;
p.yearBirth = i;
em.persist(p);
}
em.getTransaction().commit();
// Find the number of Point objects in the database:
Query q1 = em.createQuery("SELECT COUNT(p) FROM Pet p");
System.out.println("Total People: " + q1.getSingleResult());
// Retrieve all the Point objects from the database:
TypedQuery<People> query =
em.createQuery("SELECT p FROM People p", People.class);
List<People> results = query.getResultList();
for (People p : results) {
System.out.println(p);
}
// Close the database connection:
em.close();
emf.close();
}
} |
Détail version
- Base de donnée fournie par uwamp : mysql-5.5.9
- Eclipse service helios SR2
- Apache Maven 2.0.11 (r909250; 2010-02-12 06:55:50+0100)
- Java version: 1.6.0_29
- Java home: C:\Program Files\Java\jdk1.6.0_29\jre
Merci d'avance pour vos suggestions ;)
PS. je suis au boulot (intercontrat power, on s'occupe comme on peut) donc j'ai rajouté les librairies hibernate à la main dans eclipse parce que sinon maven passe pas le proxy (d'où l'utilisation de uwamp qui ne nécessite pas d'installation).