特定の列(例:SELECT a FROM b
)のみを選択したいと考えています。私は、ジェネリックDAOを持っているし、私が思い付いたことは次のとおりです。JPA&Criteria API - 特定の列のみを選択する
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();
}
し、エラーがある: The method select(Selection<? extends T>) in the type CriteriaQuery<T> is not applicable for the arguments (Path<Object>)
。それをどうやって変えるべきですか?私はID
フィールドとVERSION
フィールドしか持たないタイプT
オブジェクトを取得したい、それ以外はnull
です。
タイプT
extend AbstractEntity
これらの2つのフィールドがあります。
entityClazz
はT.class
です。
ありがとうございます。私は自分のウェブサービスでそれを使いたいと思う。クライアントはIDとバージョンだけを含む「何か」のリストを要求します。次に、それをキャッシュと比較し、変更された完全なオブジェクトを要求します。合理的に聞こえる? – BartoszCichecki
ネットワークの帯域幅を節約することはできますか?データに依存していますが、データが頻繁に変更されることが予想される場合は、「空の」コピーを送信するだけで保存するよりも2つの要求を作成するtcp/ipオーバーヘッドのために帯域幅を無駄にする可能性があります。多分それはチェックアウトする価値がありますか? –
はい、わかっています。私は頻繁に変更されないデータに対してのみ使用するつもりです。 – BartoszCichecki