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 :

[mapping] composite key et objet en même temps


Sujet :

Hibernate Java

  1. #1
    Invité
    Invité(e)
    Par défaut [mapping] composite key et objet en même temps
    Bonjour à tous,
    Pourriez-vous m'aider à mapper la table category_document.

    Il s'agit d'une table sans clé primaire mais d'une composite key sur les 3 champs.
    Or je n'arrive pas a faire en sorte que les clés utilisées puissent également correspondre aux objets ... Category_document est mon point d'entrée du DAO, cad ma classe de base pour le load et save.

    Une idée ?
    voici le diagram :


    et Voici mon code
    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
     
    <hibernate-mapping>
    	<class name="com.ebusiness.spg.domain.CategoryDocument" table="CATEGORY_DOCUMENT">
    		<composite-id>
    			<key-many-to-one name="language" class="com.ebusiness.spg.domain.Language" column="LANGUAGE_ID" lazy="false"/>
    			<key-many-to-one name="category" class="com.ebusiness.spg.domain.Category" column="CATEGORY_ID" lazy="false"/>		
    			<key-many-to-one name="document" class="com.ebusiness.spg.ext.vo.File" column="DOCUMENT_ID" />
    		</composite-id>
    	    <set name="attachedContexts" table="CATEGORY_DOCUMENT_CONTEXT">
    			<key column="DOCUMENT_ID" />
    			<one-to-many column="CONTEXT_ID" class="com.ebusiness.spg.domain.Context" />
    		</set>
     
    	</class>
     
    <class name="com.ebusiness.spg.domain.Category" table="CATEGORY">
     
    		<id name="id" column="ID">
    			<generator class="native"/>
    		</id>		
    		<property name="name" column="NAME" not-null="true" />
    		<property name="updatedBy" column="DESCRIPTION" not-null="true" />
    	</class>
     
     
    <class name="com.ebusiness.spg.domain.Context" table="Context" >
     
    		<id name="id" column="ID">
    			<generator class="native" />
    		</id>
    		<property name="name" column="NAME" not-null="true" />
    		<property name="shortName" column="SHORT_NAME" not-null="true" />
    		<property name="description" column="DESCRIPTION" />
    		<property name="defaultUrl" column="DEFAULT_URL" not-null="true" />
     
    		<many-to-one name="language" class="com.ebusiness.spg.domain.Language" column="LANGUAGE_ID" not-null="true" lazy="false"/>
     
    		<set name="linkedIssues" table="ISSUE_CONTEXT">
    			<key column="CONTEXT_ID" />
    			<many-to-many column="ISSUE_ID" class="com.ebusiness.spg.domain.Issue" />
    		</set>
     
     
    	</class>
     
     
    	<class name="com.ebusiness.spg.ext.vo.Document" table="Document">
     
    		<id name="id" column="ID">
    			<generator class="sequence">
    				<param name="sequence">document_seq</param>
    			</generator>
    		</id>
    		<property name="item" column="ITEM" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" not-null="true" />		
    		<property name="name" column="FILENAME" />		
    		<many-to-one name="type" class="com.ebusiness.spg.ext.vo.FileType" column="DOCUMENT_TYPE_CODE" not-null="true" />
    		<many-to-one name="category" class="com.ebusiness.spg.ext.vo.FileCategory" column="DOCUMENT_CATEGORY_ID" />
     
    		<set name="categoryMappings" table="DOCUMENT_CATEGORY_MAPPING" cascade="all-delete-orphan">
    			<key column="DOCUMENT_ID" />	
    			<composite-element class="com.ebusiness.spg.ext.vo.FileCategoryMapping">
    				<many-to-one name="category" class="com.ebusiness.spg.ext.vo.FileCategory" column="DOCUMENT_CATEGORY_ID"/>
    				<property name="customTitle" column="custom_title"/>
    			</composite-element>
    		</set>
     
    	</class>
     
     
     
     
     
     
     
    </hibernate-mapping>
    Images attachées Images attachées  

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Slt,
    Bon je suis pas un expert hibernate loin de la mais le projet sur lequel je bosse utilise des composite id en creant des objet ID encapsulant les objets mapper dont les clé compose la clé de la table.

    en gros j'aurais un CategoryDocumentId qui aurait pour attribut Language Category et Document et j'aurais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            <composite-id name="categorieDocumentId" 
                class="monPackage.CategorieDocumentId">
                <key-many-to-one name="language" 
            class="package.Language">
                    <column name="LANGUAGE_ID"/>
                </key-many-to-one>
     
                <key-many-to-one name="category" 
                    class="package.Category">
                    <column name="CATEGORY_ID" />
                </key-many-to-one>
    ...
              </composite-id>

  3. #3
    Invité
    Invité(e)
    Par défaut
    oui si tu regardes mon code, c'est déjà ce que j'essaye de faire.
    Mais j'ai une exception de mapping :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.hibernate.MappingException: Foreign key (FKBA086F8C9EB5BCC8:CATEGORY_DOCUMENT_CONTEXT [DOCUMENT_ID])) must have same number of columns as the referenced primary key (CATEGORY_DOCUMENT [LANGUAGE_ID,CATEGORY_ID,DOCUMENT_ID])
    Ben oui, mais moi je veux mapper en plus cette relation sur une seule des 3 clés composites ...

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    t es obligé de mappé les trois clefs composites ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    oui je suis d'accord mais je reformule le problème:
    Comme je mappe les 3 clés, hibernate s'attend à ce que la table category_document_context contienne également les 3 clés FK. Or ce n'et pas la cas. Il ne contient QUE document_id.
    Nous savons que document_id est à lui seul identifiant de la table category_document.

    Donc je pourrais utiliser document_id comme simple <id> mais alors je perds le fait d'obtenir l'OBJET document auquel il fait référence. Et donc à ce moment la je dois aller rechercher manuellement l'objet document.

    Ce cas n'est pas très logique mais comme on l'a déjà dit dans d'autre forum, on ne peut pas toujours modifier les tables existantes.

    Sinon la meilleur chose à faire est de rajouter un id unique non FK à la table category_document.

    Est-ce assez clair ?
    Merci déjà pour vos réponses.
    Dernière modification par Invité ; 21/09/2006 à 12h35.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je pense que le problème viens du fait que Document_id fait référence à 2 tables.
    Elle est FK de la table document mais également l'id principal qui est référencé dans la table de jointure Category_document_context.

    Comment gérer le multiplicité de cette clé ?

    Merci

    septentryon

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/02/2013, 12h45
  2. [2.x] twig: créer un lien et envoyer un objet en même temps
    Par wilson2 dans le forum Symfony
    Réponses: 0
    Dernier message: 12/02/2013, 18h04
  3. Appliquer une action sur plusieurs objets en même temps
    Par Aminerman dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 27/10/2011, 16h00
  4. Réponses: 1
    Dernier message: 15/12/2010, 12h18
  5. m3g : utilisation de plusieurs objets en même temps
    Par chabfive dans le forum Développement Mobile en Java
    Réponses: 1
    Dernier message: 23/06/2006, 14h00

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