2012-10-25 26 views
11
List<Lahetys> last = session.createQuery("from lahetys order by lahetysNro DESC LIMIT 1").list(); 

und im Protokoll Ich habe:Wie bekomme ich den letzten Datensatz von Mysql mit Hibernate?

INFO: Hibernate: select from order by lahetysNro DESC LIMIT 1 
WARN: SQL Error: 1064, SQLState: 42000 
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your  MySQL server version for the right syntax to use near 'from order by lahetysNro DESC LIMIT 1' at line 1 

Was "von lähetys" hat passiert? Was ist die beste Vorgehensweise, um das mit HQL oder/und mit SQL zu handhaben?

Ein weiteres Problem:

Lahetys last = (Lahetys)session.createSQLQuery("select * from lahetys order by lahetysNro DESC LIMIT 1").uniqueResult(); 
session.getTransaction().commit(); 

und ich bekomme eine Ausnahme:

Ljava.lang.Object; cannot be cast to Lahetys 

So kann ich nicht um ein Objekt zu meinem lähetys-Objekt geworfen, seltsam?

Vielen Dank! Sami

Antwort

20

Ihre HQL-Abfrage ist ungültig. LIMIT ist keine gültige HQL-Klausel. Um dies in Hibernate zu tun, tun Sie einfach

Query query = session.createQuery("from lahetys order by lahetysNro DESC"); 
query.setMaxResults(1); 
Lahetys last = (Lahetys) query.uniqueResult(); 
+0

Danke für die Antwort! Ich habe die gleiche Ausnahme: --- AsekorjausHelper.getLastLahetysNro() ---- INFO: Ruhezustand: Wählen Sie aus der Reihenfolge von LahetysNro DESC Limit? WARN: SQL Fehler: 1064, SQLState: 42000 Fehler: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, um die richtige Syntax für 'next' from order by lahetysNro DESC limit 1 'in Zeile 1 zu verwenden. INFO: EXCEPTION OCCURED -----> Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, für die richtige Syntax, die Sie in der Nähe von 'from lahetysNro DESC limit 1' in Zeile 1 verwenden können. – Sami

+1

Siehe @RAS-Antwort. HQL verwendet Entitäten, zugeordnete Felder/Eigenschaften und Zuordnungen. Nie Tabellen- und Spaltennamen. –

6

Wenn Sie HQL verwenden, sollten Sie voll qualifizierte ClassName anstelle von TableName angeben. Genauso sollten Sie propertyName anstelle von columnName angeben. Beachten Sie auch, dass beide Groß- und Kleinschreibung beachten.

auf Ihre Fragen suchen & die Ausnahme Sie bekommen, ich gehe davon aus, dass lähetys ist Ihr Tabellenname & lahetysNro ist Ihre Spaltennamen.

Sie zum Beispiel verwenden sollten: Wenn Ihr lähetys Klasse bei com Ordner befindet:

List<Lahetys> last = session.createQuery("from com.Lahetys order by lahetysNro DESC LIMIT 1").list(); 

Für Ihre zweite Frage:

Hier haben Sie SQL anstelle von HQL verwendet. Wenn Sie SQL mit Hibernate auf diese Weise verwenden, gibt es immer List<Object[]> & nicht List<Lahetys[]> zurück.

+3

falsche Lösung: org.hibernate.hql.internal.ast.QuerySyntaxException: unerwartetes Token: Grenze in der Nähe von Zeile 1 .... Verwenden Sie .setMaxResults (1) – demon101

+3

Diese Antwort ist nicht korrekt. Siehe @demon101's Kommentar. – Kenci

+0

@ demon101, Ich konzentriere mich nicht auf 'limit' verwandte Dinge hier. Das ist etwas, was OP benutzt hat und ich rede nicht darüber. Ich erkläre nur die Ausnahmen, die OP erhalten hat und wie er sie beheben sollte. Die Verwendung von "Limit" ist hier ein ganz anderer Punkt als der Kontext. – RAS

Verwandte Themen