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
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é: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)
- 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
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 <?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>
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.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; } }
Détail version
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(); } }
- 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).
Partager