-->
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.  [ 6 posts ] 
Author Message
 Post subject: Anfänger: Bekomme komplexe Abfrage nicht hin
PostPosted: Wed May 02, 2007 4:49 am 
Newbie

Joined: Wed May 02, 2007 4:45 am
Posts: 2
Hallo!

Ich habe folgendes Konstrukt: Ein Job hat eine Collection von Status-Objekten. Diese enthalten einen Timestamp und einen Statustext. Ich möchte nun genau die Jobs filtern, in deren Status-Collection kein Objekt mit dem Text "finished" vorkommt.

Hat jemand eine Idee?

Danke!
Simon


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 02, 2007 8:21 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Wenn diese Objekte aus der DB kommen, dann kannst Du in Deinem Collection-Mapping einfach eine eine WHERE-Clausel einbauen.

Die könnte dann ja so aus sehen: where="text IS NOT LIKE '%finished%'"

Soll dies aber zur Laufzeit geschehen, bzw. ein Status erreicht finished, so musst Du ihn glaube ich nach einem Update manuell aus der Collection entfernen, wenn Du nicht die gesamte Collection neu laden willst.

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 02, 2007 8:27 am 
Newbie

Joined: Wed May 02, 2007 4:45 am
Posts: 2
FPC wrote:
Die könnte dann ja so aus sehen: where="text IS NOT LIKE '%finished%'"


Vielleicht habe ich mich schlecht ausgedrückt:
Ich brauche die Jobs, in deren Status-Collection nie ein Status mit Text "finished" vorkommt.


Simon


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 02, 2007 10:07 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Hmm, wieviele Status-Objekte hast Du denn immer so in einer Collection? Wenn es nicht zu viele sind würde ich das eher mit einer Filterfunktion in der Logik realisieren.
Als Abfrage könnte ich mir halt ein Subselect vorstellen, welches zunächst alle Jobs identifiziert, die einen Status finished besitzen. Nun suchst Du alle jobs, deren Id nicht im Ergebnis des Subselects zu finden sind.

Code:
from Job where Job.jobId is not in (select distinct Status.jobId from Status where Status.text is like '%finished%').


Ich habe leider zur Zeit keine direkte Möglichkeit zu testen aber ich denke es wäre ein Ansatz.

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Thu May 03, 2007 10:45 am 
Newbie

Joined: Wed May 02, 2007 12:21 pm
Posts: 2
Kleine Anmerkung: Das distinct kann auch weggelassen werden, da ja auf eine Menge geprüft wird.
Distinct ist wie auch order by immer sehr kostspielig.


Top
 Profile  
 
 Post subject:
PostPosted: Thu May 03, 2007 11:00 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Stimmt, daran habe ich nicht gedacht.

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


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