2016-07-27 61 views
1

Ich versuche, alle Zeilen abzurufen, wo emailAccess gleichVerursacht durch: java.sql.SQLException: Subquery liefert mehr als 1 Zeile auf alle Zeilen, in denen emailAccess thesame ist

Benutzertabelle [email protected] ist auf diese Weise strukturiert

id | name | email   | emailAccess 
1 | john |[email protected] | [email protected] 
2 | jeff |[email protected] | [email protected] 

ich eine Log-Tabelle wie diese

haben
id | userId | message 
1 | 1  | bla bla 
2 | 2  | 1234 

jetzt ich die folgende HQL Abfrage bin mit dem Protokoll abgerufen werden auf der Basis der Benutzer-ID, wo emailAccesss von sesssion ist [email protected]

String hql = "FROM Chat c WHERE c.user = (FROM User u WHERE u.emailAccess = :emailAccess)"; 

     return _sessionFactory.getCurrentSession().createQuery(hql).setParameter("emailAccess", emailAccess).list(); 

versucht, die oben HQL-Abfrage zu verwenden, gibt mir diesen Fehler

Caused by: org.hibernate.exception.DataException: could not extract ResultSet 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:135) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 

zweite stacktrace

Caused by: java.sql.SQLException: Subquery returns more than 1 row 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) 

Wo bin ich versagt. Bitte helfen!

Antwort

1

mit HQL können Sie den Zugriff auf Objekte und deren Attribute, versuchen Sie diese Abfrage:

String hql = "FROM Chat c WHERE c.user.emailAccess = :emailAccess" 
+0

das Display ist nicht sortiert nach zu den Zeilen –

+0

'FROM Chat c WHERE c.user.emailAccess =: E-MailAccess Auftrag von c.id' –

1
(FROM User u WHERE u.emailAccess = :emailAccess) 

Dies gibt mehr als eine Zeile und Sie haben:

WHERE c.user = 

Sie können nicht haben ein mit mehreren Ergebnissen auf der rechten Seite gleich. Entweder Ihre Abfrage zu ändern, um eine einzelne Zeile zurückzukehren, oder etwas sein, ändern wie:

WHERE c.user in