Mi piace l'idea di Named Query in JPA per le query statiche che sto per eseguire, ma spesso desidero ottenere il risultato del conteggio per la query nonché un elenco di risultati da qualche sottoinsieme della query. Preferirei non scrivere due NamedQueries quasi identici. Idealmente, ciò che mi piacerebbe avere è qualcosa di simile:C'è un modo per ottenere le dimensioni del conteggio per una query con nome JPA con un set di risultati?
@NamedQuery(name = "getAccounts", query = "SELECT a FROM Account")
.
.
Query q = em.createNamedQuery("getAccounts");
List r = q.setFirstResult(s).setMaxResults(m).getResultList();
int count = q.getCount();
Quindi diciamo che m è 10, s è 0 e ci sono 400 righe in conto. Mi aspetto che r abbia una lista di 10 elementi, ma vorrei sapere che ci sono 400 righe in totale. Potrei scrivere un secondo @NamedQuery:
@NamedQuery(name = "getAccountCount", query = "SELECT COUNT(a) FROM Account")
ma sembra una violazione DRY per farlo se sto sempre e solo andando a voler il conteggio. In questo semplice caso è facile mantenere i due sincronizzati, ma se la query cambia, sembra meno che ideale aggiornare entrambi @NamedQueries per mantenere i valori in linea.
Un caso di utilizzo comune in questo caso è il recupero di alcuni sottoinsiemi degli articoli, ma è necessario indicare il conteggio totale ("Visualizzazione 1-10 di 400").
finalmente funzionante anche per namedQueries! grazie – Zavael
Interessante, non sapevo nemmeno che si potesse fare riferimento a finali statiche durante la configurazione delle annotazioni. Tuttavia, una soluzione che non richiedesse due query denominate separate sarebbe comunque l'ideale, credo. – aroth