-->
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.  [ 5 posts ] 
Author Message
 Post subject: Problem Statement (JOIN von 3 Tabellen, GROUP BY, HAVING)
PostPosted: Fri Jan 19, 2007 10:41 am 
Beginner
Beginner

Joined: Thu Nov 23, 2006 5:09 am
Posts: 21
Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp

Hibernate version:
3.1

Name and version of the database you are using:

ORACLE 9 und 10

Args...

Das Modell:
Fach enthält 1:n Ordner enthält 1:n Dokumente

Dokument hat nun das Atribut 'int pages'.
Bisher war das nebensächlich, doch nun muss die Auslastung ermittelt werden. (In welchem Fach ist noch Platz)

Also wäre folgende Funktion nötig

public List getCompartmentBelow(int pages){
...
}

Als SQL recht einfach, wenn auch ein umständlicher Join durch die Zwischenstufe des Ordners:

SELECT compartmentid
FROM compartment, folder, document
WHERE compartment.id = folder.compartmentid
AND folder.id = document.folderid
GROUP BY compartment.id
HAVING SUM(document.pages) < 100

Alle Join Lösungen die ich finde, gehen nur über 2 Tabellen außerdem nutzen alle HQL.
Gibt's da nichts 'schönes' mit der Hibernate API!? Ich fang doch jetzt nicht wieder an HQL oder SQL Statements zu hacken, dann hätte ich die DAO auch selber schreiben können.


Top
 Profile  
 
 Post subject: Blöde Frage? Keine Lösung??
PostPosted: Tue Jan 23, 2007 10:00 am 
Beginner
Beginner

Joined: Thu Nov 23, 2006 5:09 am
Posts: 21
Hmmm, scheinbar findet die Frage zwar Interesse, aber entweder ist die Frage so banal dass niemand sie beantwortet oder es weiß keiner ne Antwort?!


Ich lass mal den ganzen Modellkram weg:


Gibt es eine Möglichkeit mit der Hibernate API OHNE HQL einen Join über eine 'Kette' von drei Tabellen T1 bis T3 zu machen um aus T1 Elemente abhängig von T3 zu laden, wobei die einzige Verbindung die über T2 ist?!

Am besten noch mittels Agregationen...


Beispiel:

Gib mir alle Großeltern die ein Enkelkind haben das im Alter dem Durchschnittsalter der jeweiligen(!) Enkel entspricht.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 24, 2007 10:13 am 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Das geht theoretisch mit criteria queries, aber meines Erachtens sind die beim JOinen noch etwas fehlerhaft.
mit HQL


Code:
select g from Grosseltern g left join g.kinder k left join k.enkel e where e.x = ?

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject: HQL...
PostPosted: Thu Jan 25, 2007 4:26 am 
Beginner
Beginner

Joined: Thu Nov 23, 2006 5:09 am
Posts: 21
Hat sich erledigt, siehe unten:


Last edited by oliverT on Sun Jan 28, 2007 4:13 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 28, 2007 4:12 pm 
Beginner
Beginner

Joined: Thu Nov 23, 2006 5:09 am
Posts: 21
Nah dran, aber knapp vorbei....


Code:
public List findShipByCargoWeight(int maxCargoWeight) {

      Projection projection = Projections.alias( Projections.projectionList()
                .add(Projections.groupProperty("shipId"))
                .add(Projections.sum("weight")), "cargoWeight");
      
      Criteria criteria = session.createCriteria(Ship.class)
                      .createCriteria("containers")
                      .createCriteria("boxes")
                      .setProjection(projection);
   
      criteria.add( Restrictions.lt("cargoWeight", new Integer(maxCargoWeight)) );
      return criteria.list();
}



Es scheitert derweil daran, dass Hibernate das SUM(weight) auf 'ship' anwendet wobei das Objekt dieses Attribut ja garnicht hat (Ergebnis: org.hibernate.QueryException: could not resolve property...).
Ich muß aber doch das createCriteria() auf 'ship.class' anwenden weil ich Ship Objekte haben will...

Jemand nen Tipp?


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