2014-04-02 8 views
13

mia esigenza:Archivio CRUD di primavera: c'è findOneByMaxXYZColumn()?

prendere un oggetto (ad esempio RetainInfo) dalla tabella RETAIN_INFO se la colonna versione ha valore massimo

supportate da repository CRUD per un metodo di interfaccia come

findOneByMaxRetVersionAndCountry("DEFAULT") 

Equivalente SQL DB2:

select RET_ID, max(ri.RET_VERSION) from RETAIN_INFO ri where ri. COUNTRY='DEFAULT' group by RET_ID fetch first 1 rows only; 
  • Questa interrogazione seleziona n ID, ma in realtà vorrei che l'oggetto RetainInfo corrispondesse alla riga SINGLE restituita dalla query.

Preferisco ottenerlo senza utilizzare query personalizzate, utilizzando findBy o qualche altro metodo/interfaccia supportato da Spring CRUD.

+0

Possibile duplicato [valori max/min con documento MongoDB] (http://stackoverflow.com/questions/14425900/max-min-values-with -mongodb-document) – Wheezil

risposta

25

È possibile utilizzare la limitazione in combinazione con lo smistamento (spring data reference:limit query results). Dichiarare un metodo simile al seguente nell'interfaccia CrudRepository:

RetainInfo findTopByCountryOrderByRetVersionDesc(String country); 
+2

Iniziava a essere ridicolmente costoso quando veniva eseguito su un grande tavolo. L'ho implementato manualmente con un 'select max (t.field) dalla query JPQL di Table t'. –