Also, ich als Amateur Java und Datenbank Programmierer bin von
Hibernate immer mehr begeistert.
Nachdem ich erst mal die Geschichte mit den JOINS einigermaßen
verstanden hatte, war es mir dann fast im ersten Versuch möglich, den
richtigen Query zu definieren.
Auf SQL Ebene würde die Abfrage in etwa so aussehen (als
Eingabedaten sind die GP7*, PW0* und PP0* Produkt-IDs vorhanden):
select distinct pf.*
from parts p, rlist_to_part rp, platform_to_rlist pr, platform pf
where p.name in ('GP7B0C1RS', 'GP7E0B1RS', 'GP7E0B1S', 'PP020AP1S',
'PP020BP1S', 'PW020CP1S', 'PW020CR1S', 'PW040CS1S',
'PW040DR1S', 'PW060CR1S')
and p.id=rp.part_id
and rp.rlist_id=pr.rlist_id
and pr.platform_id=pf.id;
Es werden vier verschiedene Tabellen miteinander verknüpft, die
alle vorhanden Daten auf verschiedene Arten miteinander semantisch
verknüpfen. Auf JDBC/SQL Ebene müsste ich mich außerdem noch darum
kümmern, die Eingabe Daten entsprechend vorzubereiten und das Ergebnis
aus dem ResultSet wieder abholen.
Mit Hibernate sieht die analoge Abfrage dann so aus (parts enthält
bereits die Liste der Produkt-IDs)
Query query = session.createQuery("select distinct pf "
+ "from net.ridderbusch.RLISTManagement.Platform pf "
+ "join pf.rlists as rl "
+ "join rl.parts as part "
+ "where part.name in (:parts)");
query.setParameterList("parts", parts);
Als Ergebnis erhalte ich direkt ein weiter verwendbares
Java-Objekt.
Auch für die Migration der Daten aus dem alten System in das Neue
mache ich über Hibernate. Ich hatte ursprünglich vorgehabt mittels SQL
die Tabellen im neuen System zu füllen, aber dank der vielen
zusätzlichen Hibernate-Utilities, die z.B. aus einer Datenbanktabelle
die Hibernate-Mapping Datei bauen und aus dieser mit einem weiteren
Tool die zugehörigen Java-Klassen, war es letztendlich leichter die
Migration über ein eigenes Java-Programm zumachen.
Wirklich alles sehr kühl!!