"Komplexe" Datenbankabfragen, welches ist der bessere Weg

pl4gu33

Top Contributor
Hey,... ich bin gerade dabei meine Persistenzschicht(Hibernate) fertigzustellen und stehe nun vor folgendem Problem

ich hab eine 2 Tabellen, welche Bidirektional 1:N verknüpft sind,....
Meine Entities sehen wie folgt dazu aus:

Tabelle 1:
PK
KundeID
FirmenID

OneToMany...
List<Tabelle2>

Tabelle 2:
PK
Datum

ManyToOne...
Tabelle1

KundeID/FirmenID können in beliebiger Kombination stehen, daher kann eins der beiden öfter vorkommen etc.

Leider sind überall immer nur triviale Anfragemöglichkeiten aufgelistet, daher möchte ich zu folgender Anfrage wissen, was sich eher lohnt bzw. besser ist (auch rein lerntechnisch gesehen ;))

Die Anfrage: Gib mir alle Tabelle 2 Datensätze mit dem Datum XY, die zu dem Kunden Z gehören.

Lösung A:
Ich mach eine Abfrage auf Tabelle 1 und hole mir damit alle PKs, wo der User vorkommt und gehe damit auf Tabelle 2 und hole mir alle Datensätze, wo die PKs, die ich brauche vorkommen. (Also alle Anfragen auf die DB bezogen)

Lösung B:
Ich hol mir eine Anfrage auf Tabelle1 und habe somit auch direkt die Liste, dann laufe ich mit einer Schleife über die List und sortiere auf "JAVA"- Ebene aus. (das wären dann doch weniger DB Zugriffe, die wohl mehr "kosten" als eine Sortierung auf JAVA- Ebene oder sehe ich das falsch?

Danke schon mal für eure Antworten :D

ps. ich hoffe, ich werde jetzt nicht gelyncht,... :D
 
Zuletzt bearbeitet:

pl4gu33

Top Contributor
Ich kann nicht mehr editieren, darum nen Doppelpost:

Also Beispiel B fühlt sich irgendwie falsch an .... würde sich aber doch bei OR-Mapping anbieten, daher stelle ich meine Frage mal anders .... Wäre B ein falscher Ansatz und sollte man sowas wirklich nur mit DB- Anfragen umsetzen oder wäre es eine mögliche Alternative?
 
N

nillehammer

Gast
Du schreibst zwar, dass Du Hibernate benutzt, beschreibst aber nur die Datenbank. Deswegen antworte ich Dir mal für den Bereich. Weder A noch B.
Gib mir alle Tabelle 2 Datensätze
SQL:
SELECT (die,ganzen,felder) FROM Tabelle2 AS t2
, die zu dem Kunden Z gehören.
SQL:
INNER JOIN Tabelle1 As t1
ON t1.KundeId = t2.PK
mit dem Datum XY, [...] Kunden Z
SQL:
WHERE t2.Datum = '<Datum>'
AND t2.PK = '<Kunde Z>'
So in etwa. Kann natürlich sein, dass die Query nix zurück gibt, wenn entweder das Datum für keine Eintrag in Tabelle2 stimmt oder, wenn zum "Kunde Z" keine Tabelle2-Einträge zugeordnet sind.

So einen JOIN kann man auch mit JPQL, HQL oder dem Criteria-API schreiben. Vorausgesetzt, das Mapping der Entities stimmt, hat man da die freie Auswahl.
 
Zuletzt bearbeitet von einem Moderator:

pl4gu33

Top Contributor
okay vll. nochmal zum Verständnis,... das oben sollte eigentl. grob die Hibernate/JPA Struktur darstellen okay war vll. etwas verwirrend, weil ich die Tabelle genannt habe :D

das was du beschreibst, wäre ja Lösung1 :D
dass ich alles per Abfragen regel.

Lösung 2 sollte eigentl. nur wiederspiegeln, dass ich mir alle Objekt nehme, die den User beinhalten und sie auf JAVA Ebene selber sortiere,...

also:
"Querry qry = "gib mir alle Objekte Tabelle1, wo User = Z;"
und dann habe ich ja alle meine Tabelle1 Objekte wo User = Z. Und jetzt manch ich halt keine JOIN Abfrage oder sowas, sondern iteriere selber die Liste der Objekte durch und schau in jedem Objekt, ob die List<Tabelle2> das Datum enthält.

So würde ich mir halt die Anfrage sozusagen auf JAVA Basis durchführen. Die Frage ist halt, ob das wirklich sinnvoll ist, weil irgendwie fühlt es sich falsch an außerdem müsste ich prüfen, ob die Daten "Null" sind, dass ich beim Vergleich keine NullPointerException oder ähnliches bekomme... was bei einer SQL Anfrage total egal wäre.... vll. mach ich mir da auch gerade unnötig Gedanken, weil wozu gibt es denn Joins :D
 
Zuletzt bearbeitet:

pl4gu33

Top Contributor
okay das Thema hat sich erledigt :D

Lösung 2 is verworfen, da sie einfach nicht rentabel ist und ich die Abfrage über die DB einfacher hinbekomme, als alles selber zu machen (was wohl auch nicht Sinn der Sache ist!):D

Mein Denkfehler war, dass ich zu sehr an eine relationale DB gedacht habe .... aber durch die Hibernate/JPA Beziehung kann ich ja mehr in Objekten denken und da eh alles für mich mitgeladen wird (zumindest Default in JPA, in Hibernate nicht :), kann ich direkt über die "Objekt"- Referenz einfach den "JOIN" vollziehen und muss auch nix extra laden....

nun klappts auch, wie ich das wollte :D
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java komplexe Map mit 2 values ? Allgemeine Java-Themen 8
U Klassen Komplexe Datenstruktur in Java Allgemeine Java-Themen 4
F Funktionsplotter komplexe Zahlen: geeignetes 3D-Koordinatensystem Allgemeine Java-Themen 16
K Command Line Argument Interpreter für komplexe Strukturen Allgemeine Java-Themen 9
S komplexe synchronized bedingungen Allgemeine Java-Themen 6
KaffeeFan Datenbankabfragen Allgemeine Java-Themen 12
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
U Welches ist das richtige Entwurfsmuster Allgemeine Java-Themen 2
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
A Welches Speichermanagement für einen Kalkulator Allgemeine Java-Themen 7
T Welches Tuturial soll ich paralell lesen ? Allgemeine Java-Themen 3
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
G Gleiche Packages in verschiedenen JAR Dateien - Welches Package wird verwendet? Allgemeine Java-Themen 5
E Welches Dateiformat für gespeicherte Einstellungen? Allgemeine Java-Themen 20
N Servlet welches PDF erzeugt Allgemeine Java-Themen 10
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
ARadauer Welches Programm hört auf Port? Allgemeine Java-Themen 3
P Textfiles laden - egal welches Encoding Allgemeine Java-Themen 9
N Welches design pattern? Allgemeine Java-Themen 8
André Uhres Welches Werzkeug benutzt ihr um eure Mails zu lesen? Allgemeine Java-Themen 47
A Welches Programmdesign? Allgemeine Java-Themen 6
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
F welches array ist im jedem programm? Allgemeine Java-Themen 6
Z Testen welches BS benutzt wird Allgemeine Java-Themen 3
T Welches Webframew0rk für pure Java? Allgemeine Java-Themen 13
M Welches Linux zum Java testen? Allgemeine Java-Themen 5
D Welches Fenster ist im moment aktiv? Allgemeine Java-Themen 11
K Welches Betriebssystem ist in Benutzung? Allgemeine Java-Themen 11
M Welches Objekt ruft die Methode auf? Allgemeine Java-Themen 12
S Welches Verschlüsselungsverfahren Allgemeine Java-Themen 9
G Welches Java GUI Buch würdet Ihr empfehlen Allgemeine Java-Themen 2
W VersionsVerwaltung welches Tool Verwendet ihr Allgemeine Java-Themen 12
D Welches Linux in Verb. mit Java Allgemeine Java-Themen 9
S Welches LookAndFeel ist das? Allgemeine Java-Themen 2
Chucky Java Buch - nur welches? online oder kaufbuch? Allgemeine Java-Themen 18
P Welches JRE braucht meine Applikation? Allgemeine Java-Themen 3
W welches layout? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben