voici les managed bean de la classe membre et commentaire, sachant q'un commentaire ne peut être écrit que par un seul membre
Les hbm config des 2 entité:
l'entité commentaire
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
hibernate-mapping>
<class name="Commentaire" table="commentaire" catalog="projetdb">
<id name="idcommentaire" type="java.lang.Integer">
<column name="idcommentaire" />
<generator class="increment" />
</id>
<many-to-one name="membre" class="Membre" fetch="select" >
<column name="id" not-null="true" />
</many-to-one>
<property name="commentaire" type="string">
<column name="commentaire" length="250" />
</property>
<property name="datecommentaire" type="date">
<column name="datecommentaire" length="10" />
</property>
</class>
</hibernate-mapping> |
et l'entité membre
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
|
hibernate-mapping>
<class name="Membre" table="membre" catalog="projetdb">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="nom" type="string">
<column name="nom" length="40" />
</property>
<property name="prenom" type="string">
<column name="prenom" length="30" />
</property>
<property name="email" type="string">
<column name="email" length="40" />
</property>
<property name="password" type="string">
<column name="password" length="30" />
</property>
<set name="commentaires" table="commentaire" inverse="true" lazy="true" fetch="select">
<key>
<column name="id" not-null="true" />
</key>
<one-to-many class="Commentaire" />
</set>
</class>
</hibernate-mapping> |
le code action jsf 2
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
|
private Integer id;
private String nom;
private String prenom;
private String password;
private String email;
private Set commentaires = new HashSet(0);
private SessionFactory sessionFactory;
private String commentString;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
System.out.print("debut / ");
Membre membre = new Membre();
Commentaire commentaire = new Commentaire();
membre.setNom(getNom());
membre.setPrenom(getPrenom());
membre.setEmail(getEmail());
membre.setPassword(getPassword());
commentaires.add(membre);
membre.setCommentaires(commentaires);
System.out.print("memdre edite / ");
Date today = new java.util.Date();
commentaire.setDatecommentaire(today);
commentaire.setCommentaire(getCommentString());
commentaire.setMembre(membre);
System.out.print("commentaire edite / ");
System.out.print("session fabriquer / ");
session.save(membre);
System.out.print("membre sauvegarde / ");
session.save(commentaire);
System.out.print("commentaire sauvegarde / "); |
et voici ce qu'il y a dans la base de données. En declarent une fois l'idmembre 25 puis sans le sauvegarder.
Résultat ca marche.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
pour Commentaire
id commentaire ! commentaire ! id menbre ayant ecrit le commentaire
1 a 1
2 a 2
3 e 25
4 a 25
pour membre
id nom prenom email password
1 a a a a
2 a a a a
25 e e e e |
Auparavant tout les id membre et commentaire étaient semblabe, jusqu'a la compréhension du fonctionnement d'un Set.
Et de cette notion le fonctionnement du code
Résultat appris grace à un tutoriel
http://www.objis.com/formation-java/tutoriel-hibernate-mapping-association-many-to-one.html
Ou si je me trompe c'est un coup de bol.
N'hésiter pas a donner vos suggestions ou critique;