Sfortunatamente, per questa particolare query, non ci sono molti modi "migliori" per ottenere tipicamente il valore count()
. Che cosa si potrebbe fare, per aggiungere il tipo di sicurezza, è questo:
Field<Integer> f = count();
Integer count = jooq.
.select(f) // Or selectCount(). Replaced it to illustrate the case
.from(USERS)
.fetchOne(f);
Il problema è che la maggior parte delle informazioni di tipo riguardo la proiezione è stato "perso" per il compilatore Java, per il momento i metodi fetch()
sono "raggiunto". Non è possibile che un metodo ResultQuery.fetchXXX()
possa ripristinarlo dalla clausola SELECT
e produrlo.
Sul gruppo di utenti jOOQ, alcuni utenti hanno sostenuto di spostare la proiezione nei metodi fetch()
, interamente, nel modo in cui LINQ di C# o Scala SLICK lo fanno. Ciò complicherebbe notevolmente l'espressione delle affermazioni più avanzate SELECT
. An more elaborate explanation is documented here.
Con jOOQ 3.0, è stata introdotta un'ulteriore sicurezza di livello record. In jOOQ 3.3, sarà quindi possibile recuperare un singolo valore come tale (è stato registrato come #2246):
<T> T fetchValue(Select<Record1<T>> select);
fonte
2013-02-19 09:03:33