Vorrei selezionare solo colonne specifiche (ad esempio SELECT a FROM b
). Ho un DAO generico e quello che mi è venuto in mente è:API JPA e criteri - Selezionare solo colonne specifiche
public List<T> getAll(boolean idAndVersionOnly) {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<T> criteria = builder.createQuery(entityClazz);
Root<T> root = criteria.from(entityClazz);
if (idAndVersionOnly) {
criteria.select(root.get("ID").get("VERSION")); // HERE IS ERROR
} else {
criteria.select(root);
}
return manager.createQuery(criteria).getResultList();
}
e l'errore viene: The method select(Selection<? extends T>) in the type CriteriaQuery<T> is not applicable for the arguments (Path<Object>)
. Come dovrei cambiarlo? Voglio ottenere un oggetto tipo T
con solo campi ID
e VERSION
e tutti gli altri sono null
.
Tipo T
estende AbstractEntity
che ha quei 2 campi.
entityClazz
è T.class
.
Grazie. Voglio usarlo nel mio webservice. Il client richiede un elenco di "qualcosa" contenente solo ID e versioni. Quindi lo confronta con la cache e richiede gli oggetti completi modificati. Sembra ragionevole? – BartoszCichecki
Consente di risparmiare larghezza di banda della rete? Dipendo dai dati, presumo, ma se ti aspetti che i tuoi dati cambino spesso, potresti perdere più larghezza di banda a causa del sovraccarico di tcp/ip nella creazione di due richieste rispetto al salvataggio di solo copie "vuote". Forse vale la pena di provarlo? –
Sì, lo so. Lo userò solo per i dati che non cambieranno così spesso. – BartoszCichecki