-->
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.  [ 2 posts ] 
Author Message
 Post subject: Wie relaisiere ich diese (komplizierte?) Abfrage?
PostPosted: Fri Nov 17, 2006 4:11 am 
Newbie

Joined: Mon Nov 06, 2006 4:58 am
Posts: 4
Wer kann mir bei folgender Abfrage helfen?

Ich habe eine Klasse: TRACK mit einer many-to-one Verbindung zu ContentSet:

Code:
..
   <class name="com.nuromobile.accounting.DomainObjects.Track"
      table="track">
..
      <many-to-one name="contentSet"></many-to-one>
..



Ein ContentSet hat eine Liste von ContentItems(many-to-many)

Code:
..
   <class name="com.nuromobile.accounting.DomainObjects.ContentSet"
      table="content_set">
..
      <list name="Items" table="sets_items">
         <key column="set_id" />
         <list-index column="ind" />
         <many-to-many column="item_id"
            class="com.nuromobile.accounting.DomainObjects.ContentItem" />
      </list>



Jedes Content_item hat eine Verbindung zu dem Hersteller des Items(many-to-one) zu COntentProducer:

Code:
    <class name="com.nuromobile.accounting.DomainObjects.ContentItem" table="content_item">
..
      <many-to-one name="contentProducer"></many-to-one>
..


Nun möchte ich folgende Abfrage realisieren:

"Gib mir eine Liste mit allen Items die zu ContentSets gehören, die in der Track Tabelle sind und den ContentProducer X haben.

Muss ich evtl. eine Biderektionale Beziheung anlegen? Ich komme einfach nicht weiter, was kann ich da machen?

Bin für jeden, auch noch so kleinen Tip, dankbar.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Nov 29, 2006 7:32 am 
Beginner
Beginner

Joined: Thu Nov 23, 2006 5:09 am
Posts: 21
Du kommst doch durch die m zu n Beziehung ContentSet/ContentItem eh nicht um ne bidirektionale Beziehung (ReferenceTable im klassischen ERD) herum!?

Als Einzelabfrage wird das anschließend ein ziemlich großer JOIN, respektive ein unangenehmes Subselect.
Daher würde ich über eine sequenzielle Abfrage mit Zwischenergebnissen nachdenken. Das hängt natürlich von der Notwendigkeit eines atomaren Vorgehens ab.

Erst alle ContentSets identifizieren welche in Tracks enthalten sind.
Dann alle ContentItems vom Producer 'XY' suchen.

Abschließend die Liste der ContentItems mit den ContenSetIds abgleichen.

Als SELECT:

Code:
SELECT ContentItem.*
FROM ContentSetItem, ContentItem, Producer
WHERE ContentItem.producerId = Producer.Id
AND ContentItem.id = ContentSetItem.itemId
AND ContentSetItem.setId IN
( SELECT ContentSet.id
FROM ContentSet, Track
WHERE ContentSet.trackId = Track.id)



Ich würde dafür glaub ich nen View bauen wenn Du diese Liste nur lesend brauchst.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 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.