salut,
je cherche à tester JPA, avec eclipse, hibernate.
j'ai créé un projet JPA (j'utiliser eclipse JEE) contenant une entity personne, et deux clases contenant une méthode main pour les tests.
(le tout est fourni plus loin mais ce n'est je crois pas très important car le problème ne vient pas de là).
le problème - j'y arrive - est que je n'arrive pas à faire correctement reconnaître hibernate.
à l'execution j'ai le message suivant:
je pense que le problème vient de l'intégration d'hibernate avec le projet, ce que j'ai fait c'est de télécharger hibernate-core sur le site d'hibernate et de copier les jars dans une librairie utilisateur, et d'incorporer cette dernière dans le projet.Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager
at org.hibernate.ejb.Ejb3Configuration.<init>(Ejb3Configuration.java:127)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:119)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at tests.InitDB.main(InitDB.java:19)
Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.ReflectionManager
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 5 more
mais je m'y suis peut-être mal pris (j'ai peut-être oublié des fichiers).
pouvez-vous me dire quels fichiers jars copier dans la librairie, et quels fichiers télécharger à partir du site d'hibernate(hibernate-annotations...)
aussi je crois qu'il y a une fichier javaee.jar à inclure mais je ne sais pas d'où...
olivier.
NB:
fichier Pesonne.java
fichier initDB.java (qui contient main)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122 package entites; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Version; @SuppressWarnings("unused") @Entity public class Personne { @Id @Column(name = "ID", nullable = false) @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = "VERSION", nullable = false) @Version private int version; @Column(name = "NOM", length = 30, nullable = false, unique = true) private String nom; @Column(name = "PRENOM", length = 30, nullable = false) private String prenom; @Column(name = "DATENAISSANCE", nullable = false) @Temporal(TemporalType.DATE) private Date datenaissance; @Column(name = "MARIE", nullable = false) private boolean marie; @Column(name = "NBENFANTS", nullable = false) private int nbenfants; // constructeurs public Personne() { } public Personne(String nom, String prenom, Date datenaissance, boolean marie, int nbenfants) { setNom(nom); setPrenom(prenom); setDatenaissance(datenaissance); setMarie(marie); setNbenfants(nbenfants); } // toString public String toString() { return String.format("[%d,%d,%s,%s,%s,%s,%d]", getId(), getVersion(), getNom(), getPrenom(), new SimpleDateFormat("dd/MM/yyyy") .format(getDatenaissance()), isMarie(), getNbenfants()); } // getters and setters public Integer getId() { return id; } private void setId(Integer id) { this.id = id; } public int getVersion() { return version; } private void setVersion(int version) { this.version = version; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public Date getDatenaissance() { return datenaissance; } public void setDatenaissance(Date datenaissance) { this.datenaissance = datenaissance; } public boolean isMarie() { return marie; } public void setMarie(boolean marie) { this.marie = marie; } public int getNbenfants() { return nbenfants; } public void setNbenfants(int nbenfants) { this.nbenfants = nbenfants; } }
fichier 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 package tests; import java.text.ParseException; import java.text.SimpleDateFormat; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import entites.Personne; public class InitDB { // constantes private final static String TABLE_NAME = "jpa01_personne"; public static void main(String[] args) throws ParseException { // récupérer un EntityManagerFactory à* partir de l'unité de persistance EntityManagerFactory emf = Persistence.createEntityManagerFactory("personne1"); // récupérer un EntityManager à* partir de l'EntityManagerFactory EntityManager em = emf.createEntityManager(); // début transaction EntityTransaction tx = em.getTransaction(); tx.begin(); // supprimer les éléments de la table PERSONNE em.createNativeQuery("delete from " + TABLE_NAME).executeUpdate(); // mettre des éléments dans la table PERSONNE Personne p1 = new Personne("Martin", "Paul", new SimpleDateFormat("dd/MM/yy").parse("31/01/2000"), true, 2); Personne p2 = new Personne("Durant", "Sylvie", new SimpleDateFormat("dd/MM/yy").parse("05/07/2001"), false, 0); // persistance des personnes em.persist(p1); em.persist(p2); // affichage personnes System.out.println("[personnes]"); for (Object p : em.createQuery("select p from Personne p order by p.nom asc").getResultList()) { System.out.println(p); } // fin transaction tx.commit(); // fin EntityManager em.close(); // fin EntityManagerFactory emf.close(); // log System.out.println("terminé ..."); } }
voilà, j'éspère que cela vous servira(voir aussi la photo jointe).
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 <?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="personne1" transaction-type="RESOURCE_LOCAL"> <!-- provider --> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <!-- Classes persistantes --> <property name="hibernate.archive.autodetection" value="class, hbm" /> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="use_sql_comments" value="true"/> <!-- connexion JDBC --> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jbossdb" /> <property name="hibernate.connection.username" value="id" /> <property name="hibernate.connection.password" value="password" /> <!-- création automatique du schéma --> <property name="hibernate.hbm2ddl.auto" value="create" /> <!-- Dialecte --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> <!-- propriétés DataSource c3p0 --> <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>
Partager