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. :)