1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2010
    Messages : 8
    Points : 9
    Points
    9

    Par défaut Clé primaire composite

    Bonjour, je suis stagiaire et je débute le JEE et Hibernate.

    Mon problème et que je dois chercher une ligne dans une base de données dont la clé primaire et composé de deux champs :
    PRIMARY KEY(id1, id2).

    Pour chercher une ligne dans la base de donnée j'utilise la fonction get() de HibernateTemplate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Object get(Class entityClass,
                      Serializable id)
               throws DataAccessException
    Dans le cas d'une table ayant sa clé primaire sur un seul champ je passe juste l'id en paramètre de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    long id=1;
    this.getHibernateTemplate().get(MaClasse.class, id);
    Or, ici, j'ai un id1 de type long et un id2 de type int qui permettent d'identifier une entrer unique dan ma table.

    J'ai essayé de créer un objet implémentant l'interface serializable contenant un int et un long puis de le passé à get mais ça ne marche pas.

    Je voudrais éviter les solution du genre :
    1.prendre toutes les lignes dans la table
    2.chercher les lignes contentant id1
    3.chercher dans ses ligne celle qui contient id2

    Voila en espérant que mon explication est claire. Je pense que la solution ne doit pas être très compliqué étant donné que les id composite sont très fréquent en base de donnée.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    6 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 6 676
    Points : 8 747
    Points
    8 747
    Billets dans le blog
    1

    Par défaut

    Le principe est le bon, tu as peut-être mal configuré le mapping.
    Peux-tu montrer ton mapping (ou les annotations) ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2010
    Messages : 8
    Points : 9
    Points
    9

    Par défaut

    Tu parles de ça non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <hibernate-mapping package="maif.dli.gdf.common.vo">
    	<class name="FluxEntrant" table="T_FLUXENTRANT" lazy="false">
    		<composite-id>
    			<key-property name="id" column="ID_FLUX" type="long" />
    			<key-property name="idEnvironnement" column="ID_ENVIRONNEMENT"
    				type="int" />
    		</composite-id>
    		<property name="descript" column="DESCRIPT_FLUXENTRANT" />
    		<property name="pathLivraison" column="PATHLIVRAISON_FLUXENTRANT" />
    		<property name="alerteMail" column="ALERTEMAIL_FLUXENTRANT" />
    		<property name="dateDernTransfert" column="DATEDERNTRANSFERT_FLUXENTRANT" />
    	</class>
    </hibernate-mapping>
    Merci de m'avoir répondu si vite

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    6 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 6 676
    Points : 8 747
    Points
    8 747
    Billets dans le blog
    1

    Par défaut

    Tu devrais utilises l'attribut "class" de <composite-id> pour spécifier la classe de la clé composite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class FluxEntrantId
    {
       private long id;
       private int idEnvironnement;
       ...
    }
    class FluxEntrant
    {
       private FluxEntrantId uid;
       private String descript;
       ...
    }
    le mapping serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <class name="FluxEntrant" table="T_FLUXENTRANT" lazy="false">
        <composite-id name="uid" class="FluxEntrantId">
            <key-property name="id" column="ID_FLUX" type="long" />
            <key-property name="idEnvironnement" column="ID_ENVIRONNEMENT" type="int" />
        </composite-id>
        <property name="descript" column="DESCRIPT_FLUXENTRANT" />
        <property name="pathLivraison" column="PATHLIVRAISON_FLUXENTRANT" />
        <property name="alerteMail" column="ALERTEMAIL_FLUXENTRANT" />
        <property name="dateDernTransfert" column="DATEDERNTRANSFERT_FLUXENTRANT" />
    </class>
    Ensuite, pour accéder à l'enregistrement, se serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FluxEntrantId id = new FluxEntrantId(100L, 10);
    FluxEntrant fluxEntrant = (FluxEntrant)session.find(id);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2010
    Messages : 8
    Points : 9
    Points
    9

    Par défaut

    Ok merci beaucoup OButterlin.
    Effectivement ça marche et c'est propre comme j'aime
    C'est sympa de m'avoir donné l'exemple des classes aussi
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. clef primaire composite
    Par gdobbels dans le forum SQL
    Réponses: 5
    Dernier message: 25/06/2010, 15h12
  2. raquete insert et clé primaire composite
    Par FloFlo2 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 11/03/2010, 16h28
  3. cles primaires composites
    Par Tauros_king dans le forum Hibernate
    Réponses: 11
    Dernier message: 20/02/2007, 15h26
  4. Réponses: 1
    Dernier message: 11/08/2006, 23h02
  5. [C#] Probleme sur les clés primaires composites
    Par stardeus dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/02/2005, 23h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo