Chciałbym wybrać tylko określone kolumny (na przykład SELECT a FROM b
). Mam rodzajowe DAO i co wymyśliłem to:Interfejs API JPA i kryteriów - wybierz tylko określone kolumny
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();
}
a błąd jest: The method select(Selection<? extends T>) in the type CriteriaQuery<T> is not applicable for the arguments (Path<Object>)
. Jak mam to zmienić? Chcę uzyskać obiekt typu T
, który ma tylko pola ID
i VERSION
, a wszystkie pozostałe to null
.
Wpisz T
rozszerza AbstractEntity
, który ma te 2 pola.
entityClazz
to T.class
.
Dziękuję. Chcę go użyć w moim serwisie internetowym. Klient żąda listy "czegoś" zawierającego tylko identyfikatory i wersje. Następnie porównuje go do pamięci podręcznej i żąda pełnych obiektów, które się zmieniły. Brzmi rozsądnie? – BartoszCichecki
Czy to oszczędza przepustowość sieci? Zakładam, że zależy to od danych, ale jeśli spodziewasz się, że twoje dane będą się często zmieniać, możesz zmarnować większą przepustowość z powodu narzutów tcp/ip tworzenia dwóch próśb niż zapisywania od wysyłania "pustych" kopii. Może warto to sprawdzić? –
Tak, wiem. Używam go tylko dla danych, które nie będą się tak często zmieniać. – BartoszCichecki