Bonjour, j'ai un problème dont je ne peux resoudre...
En disposant de deux classes (Etudiant et Matiere), j'ai suivi le tutorial Hibernate pour tout apprendre. Néanmoins je suis bloqué dans le chapitre 1.3.3 car l'un des méthodes ne marche pas. En le mettant en commentaire sur la méthode en question, tout le reste du code source marche.
Voici le code source, j'ai mis en gras tout la méthode qui me pose problème. Les autres methodes ont tous été testés et marche sans aucun soucis.
La méthode AjoutEtuMat(int,int) a comme paramètre deux identifiants (un identifiant pour l'Etudiant et l'autre pour la matière). Les identifiants sont insérer à la main pour le moment.
Si je n'execute meme pas mais que je ne mets pas de commentaire, impossible de compiler quand meme.
Voici mon code d'erreur :
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 package BaseDonnee; import java.util.List; import org.hibernate.Session; import org.hibernate.Query; import java.util.Date; import util.HibernateUtil; public class MatiereManager { public static void main(String[] args) { MatiereManager mgr = new MatiereManager(); System.out.println("Variable ? : "+args[1]); if (args.length < 1) { System.out.println("Manque d'arguments : "+args.length); System.exit(-1); } /* Menu Switcher */ int test=0; if (args[0].equals("ajout_mat")) test=1; if (args[0].equals("ajout_etu")) test=2; if (args[0].equals("list_mat")) test=3; if (args[0].equals("list_etu")) test=4; if (args[0].equals("ajout_etumat")) test=5; switch(test) { case 1 : mgr.AjouterMatiere(args[1]);break; case 2 : mgr.AjouterEtu(args[1],args[2],Integer.parseInt(args[3]));break; case 3 : mgr.ListerMatiere();break; case 4 : System.out.println("Lister Etudiant");break; // case 5 : mgr.AjouterEtuMat(Integer.parseInt(args[1]),Integer.parseInt(args[2]));break; default : System.out.println("Action Inconnu");break; } HibernateUtil.getSessionFactory().close(); } /*** Fonction d'Ajout ***/ private void AjouterMatiere(String nom) { System.out.println("nom : ::: "+nom); System.out.println("Action : Ajout de Matiere"); Session session = HibernateUtil.getSessionFactory().getCurrentSession(); System.out.println("T1"); session.beginTransaction(); System.out.println("T2"); Matiere Mat = new Matiere(); Mat.setNom(nom); System.out.println("T3"); session.save(Mat); session.getTransaction().commit(); } private void AjouterEtu(String nom,String Prenom,int Age) { System.out.println("Action : Ajout d'Etudiant"); Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Etudiant Etus = new Etudiant(); Etus.setNom(nom); Etus.setPrenom(Prenom); Etus.setAge(Age); session.save(Etus); session.getTransaction().commit(); } /*** La méthode qui ne marche pas ***/ private void AjouterEtuMat(int id_Etu, int id_Matiere ) { try { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Etudiant Etu = (Etudiant) session .createQuery("select p from Etudiant p left join fetch p.matieres where p.id = :pid") .setParameter("pid",id_Etu) .uniqueResult(); // Eager fetch the collection so we can use it detached Matiere Mat = (Matiere) session.load(Matiere.class, id_Matiere); session.getTransaction().commit(); // End of first unit of work Etu.getMatieres().add(Mat); // aPerson (and its collection) is detached // Begin second unit of work Session session2 = HibernateUtil.getSessionFactory().getCurrentSession(); session2.beginTransaction(); session2.update(Etu); // Reattachment of aPerson session2.getTransaction().commit(); } catch (Exception e) { System.out.println("Erreur 180 ");e.printStackTrace(); } } /*** Lister la table Matière ***/ private void ListerMatiere() { System.out.println("Action : Lister la table Matiere \n"); /* Session de la transaction */ Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); List result = session.createQuery("from Matiere").list(); session.getTransaction().commit(); for (int i = 0; i < result.size(); i++) { Matiere Mat = (Matiere) result.get(i); System.out.println("Identifiant: "+ Mat.getId_cours()+" Matière: " + Mat.getNom()); } } }
Alors pour ceux qui me le demande, j'ai mis tout les librairies que le tutorial me demandait. Je pensais à un problème de librairies mais vus que tout le reste fonctionne....
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 bash-3.2$ ant run -Daction=list_mat Buildfile: build.xml clean: [delete] Deleting directory HibernateFinal/Universite/bin [mkdir] Created dir: HibernateFinal/Universite/bin copy-resources: [copy] Copying 4 files to HibernateFinal/Universite/bin [copy] Copied 2 empty directories to 1 empty directory under HibernateFinal/Universite/bin compile: [javac] Compiling 4 source files to HibernateFinal/Universite/bin [javac] HibernateFinal/Universite/src/BaseDonnee/MatiereManager.java:76: cannot resolve symbol [javac] symbol : method setParameter (java.lang.String,int) [javac] location: interface org.hibernate.Query [javac] .createQuery("select p from Etudiant p left join fetch p.matieres where p.id = :pid") [javac] ^ [javac] HibernateFinal/Universite/src/BaseDonnee/MatiereManager.java:81: cannot resolve symbol [javac] symbol : method load (java.lang.Class,int) [javac] location: interface org.hibernate.Session [javac] Matiere Mat = (Matiere) session.load(Matiere.class, id_Matiere); [javac] ^ [javac] 2 errors BUILD FAILED HibernateFinal/Universite/build.xml:21: Compile failed; see the compiler error output for details.
Merci d'avance de tout aide qui pourrait m'aider.
Partager