2010-01-13 2 views
9

Vorrei sapere qual è il modo migliore per ottenere l'ultima voce di una tabella con JPA. In SQL, quello che sto cercando sarebbe come:JPA trova l'ultima voce

select id from table order by id desc limit 1 

Stavo pensando a model.count(), ma che suona più come un hack che una buona soluzione;)

risposta

18

Si potrebbe usare una query JPQL che sembra molto simile alla tua query.

select t from JpaClass t order by t.id desc 

Dopo aver stabilito il vostro oggetto Query si potrebbe quindi chiamare query.getSingleResult() o chiamare query.setMaxResults (1) seguito da query.getResultList()

EDIT: Il mio errore: Si prega di notare il commento di mtpettyp sotto.

Non utilizzare query.getSingleResult() come eccezione potrebbe essere generata se non è esattamente una riga restituita - vedi java.sun.com/javaee/5/...() - mtpettyp

Vai con setMaxResults e getResultList.

query.setMaxResults(1).getResultList(); 
+6

Non utilizzare query.getSingleResult() come eccezione potrebbe essere gettato se non c'è esattamente una riga restituita - vedi http://java.sun.com/javaee/5/ docs/api/javax/persistenza/Query.html # getSingleResult() – mtpettyp

13

I risultati dei metodi di query possono essere limitati tramite le parole chiave primo o all'inizio, che possono essere utilizzati in modo intercambiabile. Un valore numerico facoltativo può essere aggiunto all'inizio/prima per specificare la dimensione massima del risultato da restituire. Se il numero viene omesso, viene considerata una dimensione del risultato pari a 1.

JpaClass findFirstByOrderByIdDesc(); 

referenced by Spring Data JPA docs