-->
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: Frage zur Abfrage über mehrere Tabellen
PostPosted: Fri Mar 28, 2008 2:57 pm 
Newbie

Joined: Fri Mar 28, 2008 2:29 pm
Posts: 2
Hibernate version: 3.2.6

Mapping documents:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
   
<hibernate-mapping>
   
   <!--        FEHLERORT       -->
    <class  name="mypackage.Fehlerort"
            table="fehlerort">
        <id name="fehlerOrtId" column="fehlerort_id" type="java.lang.String" />
        <property name="fehlerOrtText" column="fehlerort_text" type="java.lang.String" />
        <property name="fehlerOrtSort" column="fehlerort_sort" type="java.lang.Long" />
        <many-to-one name="gruppe" class="mypackage.PruefGruppe" column="gruppe_id" />       
        <set name="checklisten" table="checkliste_pruefpunkt">
            <key column="fehlerort_id" />
            <many-to-many class="mypackage.Checkliste" column="check_id" />
        </set>       
    </class>
   
   
   
    <!--        GRUPPE       -->
    <class  name="mypackage.PruefGruppe"
            table="pruef_gruppe">
        <id name="gruppeId" column="gruppe_id" type="java.lang.Long">
            <generator class="sequence">
                <param name="sequence">GRUPPE_SEQ</param>
            </generator>
        </id>
        <property name="gruppeText" column="gruppe_text" type="java.lang.String" />
        <property name="gruppeSort" column="gruppe_sort" type="java.lang.Long" />
        <many-to-one name="kategorie" class="mypackage.PruefKategorie" column="kat_id" />
        <set name="fehlerOrte" inverse="true">
            <key column="gruppe_id" />
            <one-to-many class="mypackage.Fehlerort" />
        </set>       
    </class>
   
   
   
    <!--        KATEGORIE       -->
    <class  name="mypackage.PruefKategorie"
            table="pruef_kategorie">
        <id name="katId" column="kat_id" type="java.lang.Long">
            <generator class="sequence">
                <param name="sequence">KAT_SEQ</param>
            </generator>
        </id>
        <property name="katText" column="kat_text" type="java.lang.String" />
        <property name="katSort" column="kat_sort" type="java.lang.Long" />
        <set name="pruefGruppen" inverse="true">
            <key column="kat_id" />
            <one-to-many class="mypackage.PruefGruppe" />
        </set>
    </class>
   
   
   
    <!--        CHECKLISTE       -->
    <class  name="mypackage.Checkliste"
            table="checkliste">
        <id name="checkId" column="check_id" type="java.lang.Long">
            <generator class="sequence">
                <param name="sequence">CHECKLISTE_SEQ</param>
            </generator>           
        </id>
        <property name="checkName" column="check_name" type="java.lang.String" />
        <property name="gueltigVon" column="gueltig_von" type="java.util.Date" />
        <property name="gueltigBis" column="gueltig_bis" type="java.util.Date" />
        <property name="histDatum" column="hist_datum" type="java.util.Date" />
        <property name="histAutor" column="hist_autor" type="java.lang.String" />
        <set name="fehlerOrte" table="checkliste_pruefpunkt">
            <key column="check_id" />
            <many-to-many class="mypackage.Fehlerort" column="fehlerort_id" />
        </set>
    </class>   
   
</hibernate-mapping>



Name and version of the database you are using: Oracle 10g


Tabelle:
Code:
desc fehlerort;
Name                           Null     Type
------------------------------ -------- -------------
FEHLERORT_ID                   NOT NULL VARCHAR2(11)
FEHLERORT_TEXT                 NOT NULL VARCHAR2(100)
FEHLERORT_SORT                          NUMBER
GRUPPE_ID                      NOT NULL NUMBER


desc checkliste;
Name                           Null     Type
------------------------------ -------- -------------
CHECK_ID                       NOT NULL NUMBER
CHECK_NAME                     NOT NULL VARCHAR2(100)
GUELTIG_VON                    NOT NULL DATE
GUELTIG_BIS                             DATE
HIST_DATUM                     NOT NULL DATE
HIST_AUTOR                     NOT NULL VARCHAR2(8)



desc checkliste_pruefpunkt;
Name                           Null     Type
------------------------------ -------- ------------
CHECK_ID                       NOT NULL NUMBER
FEHLERORT_ID                   NOT NULL VARCHAR2(11) 



desc pruef_gruppe;
Name                           Null     Type
------------------------------ -------- ------------
GRUPPE_ID                      NOT NULL NUMBER
GRUPPE_TEXT                    NOT NULL VARCHAR2(50)
GRUPPE_SORT                             NUMBER
KAT_ID                         NOT NULL NUMBER



desc pruef_kategorie;
Name                           Null     Type
------------------------------ -------- ------------
KAT_ID                         NOT NULL NUMBER
KAT_TEXT                       NOT NULL VARCHAR2(50)
KAT_SORT                                NUMBER





Beschreibung der Beziehungen:
Wie man evtl. aus dem Aufbau der Tabellen erkennen kann, kann es zur jeder Checkliste n Fehlerorte geben.

Umgekehrt kann jeder Fehlerort zu m Checklisten gehören.

Ein Fehlerort gehört genau zu einer Gruppe (eine Gruppe kann n Fehlerorte haben).

Eine Gruppe gehört genau zu einer Kategorie (eine Kategorie kann n Gruppen haben).






Java-Klassen:
Die ganzen POJO Klassen möchte ich euch jetzt ersparen ;)
Im Prinzip lässt sich ja alles durch das mapping ableiten.




DAS PROBLEM:
Ich nun gern alle PRUEF_KATEGORIE Objekte laden die mit einer bestimmten Checkliste in Verbindung stehen.

D.h. ich habe eine ID von einer Checkliste und müsste nun einen Join über folgende Tabellen machen:
CHECKLISTE_PRUEFPUNKT
FEHLERORT
PRUEF_GRUPPE

Im SQL (mit INNER JOIN's) sieht das ganze in etwa so aus:
Code:
SELECT DISTINCT pkat.kat_text
FROM   pruef_kategorie pkat
INNER JOIN pruef_gruppe pgrp ON (pkat.kat_id = pgrp.kat_id)
INNER JOIN fehlerort f ON (f.gruppe_id = pgrp.gruppe_id)
INNER JOIN checkliste_pruefpunkt cp ON (f.fehlerort_id = cp.fehlerort_id)
WHERE cp.check_id = 0
ORDER BY 1


(wobei ich hier jetzt speziell nur den Text selektiere).


Nun meine Frage: Wie selektiere ich diese Datensätze mit Hibernate?
In den POJO's gibt es ja kein Attribute für den Fremdschlüssel (FK).

Also in der Klasse Fehlerort.java gibts nur eine ID, einen TEXT, einen Sort und dann statt einer weiteren ID (die von der Gruppe) gibts ein Objekt vom Typ "Gruppe".




Vielen Dank schon einmal für möglich Antworten. :)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Apr 03, 2008 12:16 pm 
Newbie

Joined: Fri Mar 28, 2008 2:29 pm
Posts: 2
Hallo,

nur für Leute die das gleiche Problem haben.
Ich habs (endlich) gelöst:


SELECT DISTINCT pkat.katText
FROM PruefKategorie pkat
JOIN pkat.pruefGruppen pgrp
JOIN pgrp.fehlerOrte pfehler
JOIN pfehler.checklisten cl
WHERE cl.checkId = 0


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.