通常のクエリ方法:
Session sess=factory.getCurrentSession();
sess.beginTran....();
String hql="from Entity en where en......";
Query q=sess.createQuery(hql).setCacheble(true);
List<Entity> list=q.list();
この場合、リスト内のオブジェクトは「エンティティ」です。それらはキャッシュされます。
ただし、hqlが次のような場合、キャッシュは機能するのでしょうか。
hql="select new Result(count(xx),sum(xxx)) from Entity en ....";
class Result{
long num;
long sum;
//constructor,getter and setter
}
これで、結果リストのオブジェクトのタイプはResultになります。
List<Result> list=q.list();
私の質問は、結果オブジェクトを第2レベルのキャッシュに保存できるかどうかです。
ResultTransformerもどうですか?
q.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
この場合、q.list()内のオブジェクトのタイプはMapになりますが、これらのマップもキャッシュできますか?