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".
InformationsquelleAutor Hiny | 2014-06-03
Schreibe einen Kommentar