jpql (NamedQuery) Unterabfrage funktioniert nicht mit dem parameter
Ich bin mit JPQL und eine NamedQuery die Abfrage der Datenbank in eine kombinierte Frage.
@NamedQuery(name = "Entry.findAllForName", query = "Select p From Entry p Where p.entryId In(Select dp.entry From EntryPart dp Where dp.part IN(Select d From Part d Where d.senderId = :name))"),
Wenn ich diese Abfrage ausführen, mit:
Query query = em.createNamedQuery("Entry.findAllForName").setParameter("name", name);
List<Entry> list = query.getResultList();
logger.info("Complete query size: {}", list.size());
Bedeutet dies ein ResultSet zurückgeben, aber es ist 0.
Wenn ich den Namen Abfrage:
@NamedQuery(name = "Entry.findAllForName", query = "Select p From Entry p Where p.entryId In(Select dp.entry From EntryPart dp Where dp.part IN(Select d From Part d Where d.senderId = 'SenderName'))"),
Es funktioniert und ich bekomme das erwartete Ergebnis-Datenbank.
Ich bin nicht so vertraut mit JPQL und @NamedQueries, aber ich kann nicht sehen, den Unterschied zwischen den String vaule und der Wert des Parameters, da wenn ich ein diff, Sie sind die gleichen.
logger.info("SenderName == {} ? {}", name, name.equals("SenderName"));
Zurück "SenderName == SenderName ? true"...
Besten,
Henrik
- Können Sie Debuggen und überprüfen Sie, was ist der Wert von name hier -->Query query = em.createNamedQuery("Eintrag.findAllForName").setParameter("name", name);
- Ja, ich sehe auch, dass das Debuggen ist zu sagen, fand parameter "name" und der Einstellung "SenderName".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht in der Lage, Ihr problem reproduzieren. Ich habe die erwarteten Ergebnisse. Können Sie bitte poste mehr code?
Hier ist die code, die ich getestet und funktioniert. Ich habe dieses Beispiel aus Java2s für eine schnelle Einrichtung. Aber es hat nicht funktioniert auf den ersten, so dass ich einige änderungen vorgenommen.
Java2s benannte Abfrage Beispiel
Die änderungen, die ich habe waren:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPATest");
denn dies ist der name, den ich verwendet.src/META-INF/
OrdnerHier ist der named queries in professor.java Datei habe ich geändert, um zu sehen, ob ich replizieren könnte dein problem:
Hier ist meine geändert persistence.xml
Endlich, ich habe diese Gläser:
Hoffe, das hilft.
Haben Sie versucht, mit
setString
stattsetParameter
wenn creatina g Abfrage?