-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Besoin d'aide pour une jointure
PostPosted: Thu Oct 13, 2005 6:38 am 
Newbie

Joined: Wed Sep 21, 2005 7:57 am
Posts: 7
Location: Lausanne, Switzerland
Bonjour à tous,

J'ai une table LOCALITE avec les colonnes suivantes :
ID : clé primaire générée par une séquence
EXT_ID : not-null. {EXT_ID et SEQUENCE} forment un couple unique
NUMORDRE : peut être null
TYPE : peut être null

J'ai besoin de faire une jointure sur moi-même. En SQL, qqch comme ça :

select * from LOCALITE L1
left outer join LOCALITE L2
on L1.EXT_ID = L2.EXT_ID
and L1.TYPE = 3
and L2.NUMORDRE is null

J'ai déjà un mapping pour LOCALITE :

<class name="Localite" table="LOCALITE">
<id name="id" column="ID" type="java.lang.Long">
<generator class="sequence"/>
</id>
<property name="extId" not-null="true"/>
<property name="numOrdre" />
<property name="type" />

<!-- Qqch pour la Localite issue de la jointure ! -->

</class>

Et une class Java Localite qui possède un membre de type Localite :

class Localite {

....

private Localite localitePrincipale;

}

Comment est-ce que je pourrais réaliser cela ?

(J'espère que j'ai réussi à être clair ..)

Merci
Herbien


Top
 Profile  
 
 Post subject:
PostPosted: Tue Oct 18, 2005 8:56 am 
Senior
Senior

Joined: Tue May 10, 2005 9:00 am
Posts: 125
Bonjour,

Ton problème, c'est que ton shéma de base de donnée ne correspond pas a ta classe. Je m'explique. Dans ta classe, tu précise que a chaque localité est associée une localité principale. Alors, tu devrais avoir ceci dans ta base de donnée:


Table localite:
ID: number, primary key, sequence, not null
NUMORDRE: number
TYPE: number
LOCALITE_PRINCIPALE: number, foreign key (localite.ID)



D'un autre coté, si je lit ta requete sql:


select * from LOCALITE L1
left outer join LOCALITE L2
on L1.EXT_ID = L2.EXT_ID
and L1.TYPE = 3
and L2.NUMORDRE is null


et que ta db contient:

Code:
      ID      EXT_ID   NUMORDRE    TYPE
    ...
    101        69        1            3
    102        69        null        null
    103        69        null        null
    ...

Si je ne me trompe, tu aura deux L2 différents pour un L1 donné sans pour autant rompre le shéma de la db mais ca ne collerais pas a la classe que tu as définie.


Si vraiment tu insiste pour obtenir une Localité par une telle méthode, tu peux toujours utiliser un formula pour la propriété:

<property name="localitePrincipale" class="Localite" formula="(select ......)"/>

Mais attention, dans ce cas, hibernate ne fait que lire la valeur, il ne l'update pas!


Top
 Profile  
 
 Post subject:
PostPosted: Tue Oct 18, 2005 9:16 am 
Newbie

Joined: Wed Sep 21, 2005 7:57 am
Posts: 7
Location: Lausanne, Switzerland
Salut,

Le cas dont tu me parles ne se produit pas, car le couple {EXT_ID, NUMORDRE} est unique. (Je m'étais trompé en le mentionnant dans le post initial).

Effectivement je souhaite uniquement faire de la lecture dans cette table, donc je vais essayer d'utiliser l'attribut 'formula' comme tu me le conseilles.

Merci de ton aide.

H.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.