2016-03-24 16 views
0

abrufen Ich triggern eine Abfrage mit HQL, normalerweise sollte leere Ergebnismenge zurückgeben, da es keine Datensätze w.r.t es hat. Aber es wirftNicht in der Lage, Resultset in Hibernate mit HQL

org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106) 

Mein Code ist

String hql = "FROM com.pck.Person where userId = " + userId; 
Query query = session.createQuery(hql);   
@SuppressWarnings("unchecked") 
List<Dashboard> listUserDetails = query.list(); <-- Problem here. 

Ich erwarte Liste Größe 0 ist, weil es keine Aufzeichnungen gibt w.r.t userId weitergegeben.

Welche Änderungen muss ich tun?

+0

Sie fehlen einzelne Anführungszeichen um 'userid'. Versuchen Sie es mit "FROM com.pck.Person wo userId = '" + userId + "'"; –

Antwort

1

Hiermit kann der Wert von userId sagen "abc12"

Da der Code war, der Wert der hql genannt Zeichenfolge werden würde: "FROM com.pck.Person wo userId = abc12"

Wenn Sie haben den Wert dieser Zeichenfolge genommen und versucht, ihn als Abfrage für eine beliebige Datenbank auszuführen. Die meisten von ihnen würden nicht verstehen, dass abc12 eine Zeichenfolge ist. Normalerweise würde es als eine Variable interpretiert werden.

Als andere Benutzer erwähnt die einfachen Anführungszeichen einschließlich würde die gewünschte Abfrage produzieren, aber die empfohlene Art und Weise Parameterwerte zuweisen, ist dies:

String hql = "FROM com.pck.Person where userId = :id" 
    query.setParameter("id", userId); 
+0

Cool .. Aber was genau ist das Diff? – Syed

+0

Ich würde mehr von der StackTrace, um genauer zu sein – zmf

+0

Es ist von alphanumerischen Typ .. nicht genau lang oder int – Syed

0

Sieht aus wie Sie einfache Anführungszeichen um Benutzer-ID fehlen.

Versuchen mit "FROM com.pck.Person where userId = '" + userId + "'";

oder

Verwenden benannte Parameter mit query.setParameter("userid", userId);

die volle stacktrace Posting würde helfen, wenn diese nicht zu lösen.