JPQL Query erstellen

Status
Nicht offen für weitere Antworten.

cowabunga1984

Aktives Mitglied
Hi zusammen,

ich habe folgende Methode geschrieben:

Code:
	private List<Entry> getEntries() {
		EntityManager em = Main.getInstance().getActivePawotag()
				.getEntityManager();
		Query query;

		if (tagFilter.isEmpty()) {
			query = em.createQuery("SELECT DISTINCT e " + "FROM Entry e "
					+ "ORDER BY e.id");
		} else {
			// TODO easier???
			String queryString = "SELECT DISTINCT e "
					+ "FROM Entry e, IN (e.tags) t WHERE t.id>0 ";
			
			for (Tag tag : tagFilter) {
				queryString += "AND t.id=" + tag.getId() + " ";
			}

			query = em.createQuery(queryString);
		}

		return query.getResultList();
	}

Jetzt frage ich mich, ob es nicht möglich ist den Code viel einfacher zu schreiben?!?

Gruß
cowabunga
 
G

Guest

Gast
Die zweite Query liefert sicherlich nie etwas. Die Tag-Id kann nicht gleichzeitig mehrere Werte annehmen.
Code:
if( tagFilter.isEmpty() ) {
   return em.createQuery("select distinct e from Entry e order by e.id")
            .getResultList();
}
return em.createQuery(
   "select distinct e"
  +"  from Entry e"
  +"       left join e.tags t"
  +" where t.id in (:idList)"
  +" order by e.id"
).setParameter("idList", tagFilter.extractTagIds()) // Liefert List<Long> mit Ids der Tags
 .getResultList();
Mach noch NamedQueries daraus, dann wird es noch kürzer im Code
Code:
if( tagFilter.isEmpty() ) {
   return em.createNamedQuery(Entry.ALL)
            .getResultList();
}
return em.createNamedQuery(Entry.ALLBYTAGIDLIST)
            .setParameter("idList", tagFilter.extractTagIds()) // Liefert List<Long> mit Ids der Tags
            .getResultList();
 

cowabunga1984

Aktives Mitglied
Hi,

Du hattes Recht, mein 2. Query hat nichts returned :)

Leider hat auch Dein Vorschlag nicht genau das gemacht, was ich wollte. Meine aktuelle Lösung sieht jetzt wie folgt aus:
Code:
	private List<Entry> getEntries() {
		EntityManager em = Main.getInstance().getActivePawotag()
				.getEntityManager();
		Query query = em.createQuery("SELECT DISTINCT e FROM Entry e "
				+ "ORDER BY e.id");

		List<Entry> allEntries = query.getResultList();
		List<Entry> filteredEntries = new ArrayList<Entry>();

		for (Entry entry : allEntries) {
			if (entry.getTags().containsAll(this.tagFilter)) {
				filteredEntries.add(entry);
			}
		}

		return filteredEntries;
	}

Funktioniert soweit ganz gut. Leider werden die Entries erst im nachhinein gefiltert und nicht bereits durch den Query. Verbesserungsvorschläge? :)

Gruß
cowabunga
 
G

Guest

Gast
Wie wäre es mit sowas?
Code:
SELECT e
  FROM Entry e
 WHERE e.id IN (
	SELECT t.entry.id
	  FROM Tag t
	 WHERE t.id IN (:idList)
	 GROUP BY t.entry.id
   HAVING COUNT(t.id) = :idListSize
)
Aufruf mit der Tag-Id Liste und der Länge der Liste.

Es setzt aber voraus, dass deine Datenbank GROUP BY und HAVING ohne die Aggregation zu projiizieren zulässt (H2 z.B. macht es ohne zu zicken).
 
G

Guest

Gast
Alternativ gleich die Tags mitladen und Javaseitig filtern (so wie du es hast). Spart dir die n+1 Zugriffe beim Lesen der Tags.
Code:
SELECT DISTINCT e FROM Entry e JOIN FETCH e.tags ORDER BY e.id
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JPQL-Query like Java Basics - Anfänger-Themen 5
G AND-Verknüpfung in JPQL-Queries! Java Basics - Anfänger-Themen 2
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
I JPA / Hibernate "Predicate" kombinieren in der gleichen Query Java Basics - Anfänger-Themen 1
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
D Command Query Separation Java Basics - Anfänger-Themen 21
I JAX-RS Mehrere Parameter in Query Java Basics - Anfänger-Themen 3
S Java Filter und Query Java Basics - Anfänger-Themen 4
G SQL View query Java Basics - Anfänger-Themen 4
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
W MySQL PreparedStatement query Problem Java Basics - Anfänger-Themen 10
X MySQL - Query Java Basics - Anfänger-Themen 3
D Derby DB zu Query?! Java Basics - Anfänger-Themen 9
B Java MySQL Query ausgeben Java Basics - Anfänger-Themen 4
J Java JDBC MySQL Query Java Basics - Anfänger-Themen 6
L SQL Query an andere Klasse übergeben Java Basics - Anfänger-Themen 3
G Frage zu Query Java Basics - Anfänger-Themen 8
L hsqldb - query als String ausgeben Java Basics - Anfänger-Themen 3
I Query aus Textdatei auslesen? Java Basics - Anfänger-Themen 4
XWing Int erstellen lassen? Java Basics - Anfänger-Themen 11
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J Packages erstellen Java Basics - Anfänger-Themen 7
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
Ostkreuz Spielfeld Schatz erstellen Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
B Klasse statisch erstellen da n-mal geladen Java Basics - Anfänger-Themen 3
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
A Passwort erstellen Java Basics - Anfänger-Themen 3
S CVS erstellen Java Basics - Anfänger-Themen 1
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
dennis_lnz Klassen Wie kann ich mein Java Textadventure verbessern, um ein Klassendiagramm zu erstellen? Java Basics - Anfänger-Themen 9
dcHost Java Kara Sensor erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
N 2D Array Summe erstellen Java Basics - Anfänger-Themen 6
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S Programm erstellen Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
T Countdown erstellen Java Basics - Anfänger-Themen 7
I ZIP File erstellen Java Basics - Anfänger-Themen 10
L Ordner in neuen erstellten Ordner erstellen Java Basics - Anfänger-Themen 12
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Zurück Button erstellen Java Basics - Anfänger-Themen 1
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
B JaxB - Referenzen erstellen? Java Basics - Anfänger-Themen 2
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
E Classpath Datai erstellen Java Basics - Anfänger-Themen 3
B eine methode erstellen Java Basics - Anfänger-Themen 7
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
L FinanzApp erstellen Java Basics - Anfänger-Themen 1
J Junit4 Klasse erstellen Java Basics - Anfänger-Themen 5
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
JaVaN0oB Bruchklasse erstellen Java Basics - Anfänger-Themen 9
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
K Rahmen erstellen mit mehrdimensionalem Array Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
K Objektdiagramm erstellen Java Basics - Anfänger-Themen 3
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3
D Klassen Klassendiagramm richtig erstellen Java Basics - Anfänger-Themen 20
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
E Filmsammlung erstellen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben