Bonjour

Eh bien oui, encore une question sur le persistence.xml par un débutant. 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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).