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

aw dzienniku uzyskałem:Jak zdobyć ostatni rekord z Mysql przy użyciu Hibernacji?

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 

Co się stało z "z LAHETYS"? Jak najlepiej radzić sobie z HQL i/lub SQL?

Kolejny problem:

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

i otrzymuję wyjątek:

Ljava.lang.Object; cannot be cast to Lahetys 

Więc nie można rzutować obiektu do mojego Lahetys-obiektu, dziwne?

Dziękujemy! Sami

Odpowiedz

20

Zapytanie HQL jest nieprawidłowy. LIMIT nie jest prawidłową klauzulą ​​HQL. Aby to zrobić w Hibernate, zrób

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

Dziękuję za odpowiedź! Mam ten sam wyjątek: --- AsekorjausHelper.getLastLahetysNro() ---- INFO: Hibernate: wybierz z zamówienia przez limit de lahetysNro DESC? WARN: Błąd SQL: 1064, SQLState: 42000 BŁĄD: Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu "od zamówienia przez lahetysNro DESC limit 1" na linii 1 INFO: WYKRYTY WYGLĄD -----> Masz błąd w swojej składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu "od zamówienia przez lahetysNro DESC limit 1" pod linkiem 1 – Sami

+1

Zobacz odpowiedź @RAS. HQL używa jednostek, mapowanych pól/właściwości i powiązań. Nigdy nie używaj nazw tabel i kolumn. –

6

Kiedy używasz HQL, należy podać pełną className zamiast TableName. W ten sam sposób powinieneś podać właściwość propertyName zamiast columnName. Pamiętaj też, że w obu przypadkach rozróżniana jest wielkość liter.

Patrząc na zapytaniach & wyjątek dostajesz, jestem przy założeniu, że lahetys to nazwa tabeli & lahetysNro to nazwa kolumny.

Należy użyć na przykład: Jeżeli Lahetys klasa znajduje się w com folderu:

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

Dla 2 pytania:

Tutaj użyłeś SQL zamiast HQL. Gdy używasz SQL z hibernacją w taki sposób, zawsze zwraca List<Object[]> & nie List<Lahetys[]>.

+3

błędne rozwiązanie: org.hibernate.hql.internal.ast.QuerySyntaxException: nieoczekiwany znak: granica blisko linii 1 .... Korzystanie .setMaxResults (1) – demon101

+3

Ta odpowiedź nie jest poprawna. Zobacz komentarz @ demon101. – Kenci

+0

@ demon101, Nie skupiam się tutaj na kwestiach związanych z limitem. To jest coś, co OP użył i nie mówię o tym. Po prostu wyjaśniam, jakie wyjątki otrzymał OP i jak powinien je naprawić. Użycie 'limit' jest całkowicie innym punktem niż tutaj. – RAS

Powiązane problemy