IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

relation many-to-one avec clefs composites


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut relation many-to-one avec clefs composites
    Bonjour,

    J'ai un objet A qui a une relation facultative many-to-one vers mon objet Compte.

    Voici le mapping de l'objet Compte :

    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" encoding="ISO-8859-1"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="fr.monEntreprise.domaine">
    	<class name="Compte" table="COMPTE">
     
    		<!-- Identifiant avec cles composites -->
    		<composite-id name="id" class="CompteId">
    			<key-property name="identifiantCompte" column="idCompte"/>
                            <key-property name="exercice" type="integer" column="exerciceCompte"/>
    		</composite-id>
     
    		<!-- propriété libelleCompte -->
    		<property name="libelleCompte" column="libelle" length="35"/>
     
    	</class>
    </hibernate-mapping>
    Dans mon objet A, je ne dispose que de l'identifiant du compte et pas de l'exercice. L'exercice devant être valorisé dans la relation avec l'année de la date du jour.

    Dans mon objet A, j'ai passé la relation de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            <!-- Association unaire facultative -->
            <many-to-one name="compte" class="fr.monEntreprise.domaine.Compte" cascade="none">
    		<column name="identifiantCompte" not-null="false" />
    		<formula>year(sysdate)</formula>
    	</many-to-one>
    La lecture du mapping ne soulève aucune exception et lorsque j'essaye de lire les objets présents dans la table A, il a un comportement "bizzare" :

    Pour commencer, il rajoute une colonne pour le formula : "year(sysdate)" alors que je ne lui ai pas demandé de charger le Compte associé à l'objet A...

    Et deuxièmement, pour chaque élément trouvé dans la table A, il effectue une requete dans la table des comptes pour essayer de retrouver le compte associé à l'objet A (bonjour les perfs avec du "N+1 select").

    Pourriez-vous me dire pourquoi Hibernate a un comportement différent lorsqu'une relation comporte un élément formula dans son mapping ?
    Et une solution pour qu'il puisse avoir un comportement habituel avec un chargement en mode "lazy" (uniquement si on le demande) ?

    Merci bcp,
    F.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu peux mettre lazy="true" pour ne pas charger ton many-to-one, ce qui n'est pas le comportement par défaut.

    J'aurais écrit différemment ton mapping (mais ce n'est peut être pas la bonne solution) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <many-to-one name="compte" class="fr.monEntreprise.domaine.Compte" cascade="none">
    	<column name="idCompte" not-null="false" />
                 <column name="exerciceCompte" not-null="false" />
    </many-to-one>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    j'ai essayé de mettre lazy="proxy" sur ma relation many-to-one mais cela ne change rien !
    Dès que je mets not-found="ignore" avec l'utilisation d'une formula, il me charge obligatoirement la relation...

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/08/2014, 17h25
  2. Problème de persistance avec une relation many-to-one
    Par cb-06 dans le forum Doctrine2
    Réponses: 3
    Dernier message: 28/11/2012, 16h24
  3. [Mapping] Relation <many-to-one> avec dans les 2 tables, 2 champs de noms différents
    Par thomas_31 dans le forum Hibernate
    Réponses: 3
    Dernier message: 26/09/2012, 15h14
  4. Relation Many-to-One dans une application JSF
    Par KooKoolen dans le forum JSF
    Réponses: 1
    Dernier message: 27/12/2006, 14h13
  5. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 13h08

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