Bonjour !

Voici l'état de mon code (problème décrit ci-après) :

Code de la classe parente de mes objets du domaine :
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
 
package com.projet.domaine;
 
public abstract class ObjetProjet
{
    private Reference reference;
 
    //    public int getReference()
    //    {
    //        return reference;
    //    }
    //
    //    public void setReference(int aReference)
    //    {
    //        reference = aReference;
    //    }
 
    public Reference getReference()
    {
        return reference;
    }
 
    public void setReference(Reference aReference)
    {
        reference = aReference;
    }
 
    public void setReference(int aReference)
    {
        reference = new Reference(aReference);
    }
 
    public boolean isNouveau()
    {
        return reference == null || Reference.NEW_REFERENCE.equals(reference);
    }
 
}
Code de ma classe Reference (permettant de gérer les identifiants) :
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
 
package com.projet.domaine;
 
import java.io.Serializable;
 
public class Reference implements Serializable
{
 
    private static final long serialVersionUID = 1L;
 
    // Référence static qui prend la valeur maximale d'un int.
    public final static Reference NEW_REFERENCE = new Reference(2147483647);
 
    private int value;
 
    public int getValue()
    {
        return value;
    }
 
    public void setValue(int aValue)
    {
        value = aValue;
    }
 
    // privé pour ne pas pouvoir être appelé depuis l'exterieur.
    //    @SuppressWarnings("unused")
    private Reference()
    {
 
    }
 
    public Reference(int aValue)
    {
        value = aValue;
    }
 
    @Override
    public String toString()
    {
        return String.valueOf(value);
    }
 
}
Code de ma classe Adresse :
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
 
package com.projet.domaine;
 
import java.util.Locale;
 
public class Adresse extends ObjetProjet {
	private String numeroDeRue;
	private String rue;
	private String ville;
	private String codePostal;
	private String pays;
 
	public String getNumeroDeRue() {
		return numeroDeRue;
	}
 
	public void setNumeroDeRue(String aNumeroDeRue) {
		numeroDeRue = aNumeroDeRue;
	}
 
	public String getRue() {
		return rue;
	}
 
	public void setRue(String aRue) {
		rue = aRue;
	}
 
	public String getVille() {
		return ville;
	}
 
	public void setVille(String aVille) {
		ville = aVille;
	}
 
	public String getCodePostal() {
		return codePostal;
	}
 
	public void setCodePostal(String aCodePostal) {
		codePostal = aCodePostal;
	}
 
	public String getPays() {
		return pays;
	}
 
	public void setPays(String aPays) {
		pays = aPays;
	}
 
	@Override
	public String toString() {
		String vRet = numeroDeRue + " " + rue + "\n" + codePostal + " "
				+ ville.toUpperCase(Locale.FRANCE);
		if (pays != null && !"".equals(pays)) {
			vRet += " (" + pays + ")";
		}
		return vRet;
	}
 
}
Ma classe gérant mes services (DAO) :
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
 
package com.projet.service;
 
import org.hibernate.ObjectNotFoundException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
 
import com.projet.domaine.ObjetProjet;
import com.projet.domaine.Reference;
 
public abstract class Service<T extends ObjetProjet>
{
 
    private Configuration configuration;
    private SessionFactory sessionFactory;
    private Session session;
 
    /**
     * Permet d'initialiser la connexion à la base de données.
     * Attention, cet appel ouvre une connexion. Toute connexion ouverte doit OBLIGATOIREMENT être fermée
     */
    public void initialiserConnexion()
    {
        if (configuration == null)
        {
            configuration = new Configuration().configure("hibernate.cfg.xml");
            sessionFactory = configuration.buildSessionFactory();
        }
        initSession();
    }
 
    /**
     * Permet de fermer la connexion avec la base de données.
     * Il est important de toujours fermer la connexion si celle-ci n'est plus utilisée.
     */
    public void fermerConnexion()
    {
        session.close();
    }
 
    /**
     * Synchronise les données avec la base de données. Les données modifiées sur l'objet seront enregistrées après cela.
     */
    protected void commit()
    {
        session.getTransaction().commit();
    }
 
    /**
     * Permet d'ouvrir une transaction.
     * /!\ ATTENTION : les transactions doivent être gérées de manière précautionneuse
     */
    protected void begin()
    {
        session.beginTransaction();
    }
 
    /**
     * Permet d'initialiser la session à partir de l'usine de session.
     * Il faudra donc penser à fermer la connexion après cet appel.
     */
    private void initSession()
    {
        session = sessionFactory.openSession();
    }
 
    /**
     * Renvoie la session hibernate. Elle permet de se connecter à la base de données.
     * @return La session hibernate.
     */
    public Session getSession()
    {
        return session;
    }
 
    /**
     * Permet de récupérer un objet depuis la base de données avec son identifiant
     * @param aId L'identifiant de l'objet en base
     * @return L'objet dûement rempli avec les valeurs de la base de données.
     */
    public T get(Reference aId)
    {
        T vRet;
        try
        {
            vRet = (T) session.load(getGenericClass(), aId);
        }
        catch (ObjectNotFoundException e)
        {
            vRet = null;
        }
        return vRet;
    }
 
    /**
     * Méthode renvoyant la classe générique. En effet, il n'est pas possible d'avoir la classe du générique à partir du générique lui même
     * L'appel de cette méthode permet donc de contourner ce problème
     * @return la Class de l'objet générique que traite le Service.
     */
    public abstract Class getGenericClass();
 
}
Mon service spécifique aux Adresses :
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
 
 
package com.projet.service.unitaire.implementation;
 
import com.projet.domaine.Adresse;
import com.projet.service.Service;
import com.projet.service.unitaire.AdresseServiceUnitaire;
 
public class AdresseServiceUnitaireImpl extends Service<Adresse> implements AdresseServiceUnitaire
{
 
    @Override
    public void begin()
    {
        super.begin();
    }
 
    @Override
    public void commit()
    {
        super.commit();
    }
 
    @Override
    public Class getGenericClass()
    {
        return Adresse.class;
    }
 
}
Mon 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
 
package com.projet;
 
import com.projet.domaine.Adresse;
import com.projet.domaine.Reference;
import com.projet.service.unitaire.implementation.AdresseServiceUnitaireImpl;
 
public class Test
{
 
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        AdresseServiceUnitaireImpl vAdresseServiceUnitaireImpl = new AdresseServiceUnitaireImpl();
        vAdresseServiceUnitaireImpl.initialiserConnexion();
        vAdresseServiceUnitaireImpl.begin();
        //        Adresse vAdresse = new Adresse();
        //        vAdresse.setCodePostal("27350");
        //        vAdresse.setNumeroDeRue("5");
        //        vAdresse.setPays("FRANCE");
        //        vAdresse.setReference(Reference.NEW_REFERENCE);
        //        vAdresse.setRue("rue de la Mare Mande");
        //        vAdresse.setVille("ROUTOT");
        //        vAdresse.setReference(1);
        //        vAdresseServiceUnitaireImpl.getSession().save(vAdresse);
        //        vAdresseServiceUnitaireImpl.getSession().getTransaction().commit();
        Adresse vAdresse = vAdresseServiceUnitaireImpl.get(new Reference(1));
        System.out.println("L'adresse retrouvée est : \n" + vAdresse);
        vAdresseServiceUnitaireImpl.fermerConnexion();
 
    }
 
}
Et enfin mes deux fichiers de configurations :
D'abord hibernate.cfg.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://etourneaumo.no-ip.biz/Projet</property>
    <property name="hibernate.connection.username">etourneaumo</property>
    <property name="hibernate.connection.password">MotDeP@$$e</property>
    <mapping resource="com/projet/domaine/Adresse.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
Et mon fichier de mapping pour Adresse :
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
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
	<class name="com.projet.domaine.Adresse" table="_Adresse">
		<id name="reference" type="serializable" column="reference">
			<generator class="assigned"/>
		</id>
		<property name="numeroDeRue" type="string" not-null="false" />
		<property name="rue" type="string" not-null="false" />
		<property name="ville" type="string" not-null="false" />
		<property name="codePostal" type="string" not-null="false" />
		<property name="pays" type="string" not-null="false" />
	</class>
</hibernate-mapping>
Voila, donc après cette entrée en matière un peu longue, voici mon problème.
Dans mon main, j'ai mis en commentaire le code me permettant d'enregistrer une nouvelle adresse. J'ai bien mis une référence à 1 dans mon main, et pourtant, dans ma base de données, la colonne référence prend toujours la valeur 0...
Dans la base, le champ n'est pas mis en auto_increment.
C'est juste la primary key, donc not null, ...
Je me demande si j'ai pas un problème de mapping et qu'il n'arrive pas à mapper ma colonne reference avec mon champ reference de mon objet ...

Quelqu'un aurait une idée ?

Merci d'avance