1

通常のクエリ方法:

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になりますが、これらのマップもキャッシュできますか?

4

1 に答える 1

0

「newResult(...)」では確かに機能しますが、ResultTransformerについては100%確信がありません。クエリの後に変換が行われることを考えると、そうならない理由はわかりません。

于 2010-12-23T10:31:58.787 に答える