Bonjour les amis ,

je travaille actuellement sur un projet en JSF/Hibernate/MySQl sur NetBeans , je donne l'exemple ci-dessous pour bien expliquer mon problème .

J'ai 2 tables (Pays/ville):

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
CREATE TABLE `pays` (
  `id_pays` int(11) NOT NULL auto_increment,
  `lib_pays` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`id_pays`)
) ENGINE=InnoDB


Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE `ville` (
  `id_ville` int(11) NOT NULL auto_increment,
  `lib_ville` varchar(40) NOT NULL default '',
  `code_pays` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id_ville`),
  KEY `fk_pays_numero` (`code_pays`)
) ENGINE=InnoDB
J'ai crée les deux fichiers hbm de mapping :

Code xml : 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
<hibernate-mapping default-lazy="true">
    <class name="Mapping.Pays" table="pays" catalog="pays_ville" optimistic-lock="version">
        <id name="idPays" type="java.lang.Integer">
            <column name="id_pays" />
            <generator class="identity" />
        </id>
        <property name="libPays" type="string">
            <column name="lib_pays" length="40" not-null="true" />
        </property>
        <set name="villes" table="ville" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="code_pays" not-null="true" />
            </key>
            <one-to-many class="Mapping.Ville" />
        </set>
    </class>
</hibernate-mapping>
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<hibernate-mapping>
    <class name="Mapping.Ville" table="ville" catalog="pays_ville" optimistic-lock="version">
        <id name="idVille" type="java.lang.Integer">
            <column name="id_ville" />
            <generator class="identity" />
        </id>
        <many-to-one name="pays" class="Mapping.Pays" fetch="select">
            <column name="code_pays" not-null="true" />
        </many-to-one>
        <property name="libVille" type="string">
            <column name="lib_ville" length="40" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
et les deux class java :

Pays.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public class Pays  implements java.io.Serializable {
 
 
     private Integer idPays;
     private String libPays;
     private Set villes = new HashSet(0);
 
    public Pays() {
    }
    /* Getters/setters... */
Ville.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public class Ville  implements java.io.Serializable {
 
 
     private Integer idVille;
     private Pays pays;
     private String libVille;
         //private Integer idPays;
 
    public Ville() {
    }
    /* Getters/setters... */
J'arrive à créer le pays sans problème sur la classe PaysBean

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
   public String CreerPays()
    {
         try
         {
 
            Session session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            Pays pays = new Pays();
            pays.setLibPays(libPays);
            pays.setIdPays(idPays);
            session.save(pays);
            session.getTransaction().commit();
            session.close();
         }
         catch(Exception e)
         {
             e.printStackTrace();
             return "ko";
         }
 
        return "ok";
    }
Mais mon problème est lorsque j'essaie de créer une ville pour le pays que je viens de créer :

VilleBean :

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
   public String creeville()
    {
         try
         {
 
            Session session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            Ville ville = new Ville();
            ville.setLibVille(libVille);
            ville.setPays(pays); 
 
 
            session.save(ville);
            //tx.commit();
             session.getTransaction().commit();
            session.close();
...
Je dois faire quoi exactement pour que je puisse créer une ville liée au pays sélectionné .
Prière de me débloquer