2010-12-23 4 views
1

manière normale requête:est le deuxième niveau de support cache pour mettre en cache le résultat de la requête exclut l'entité

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(); 

Dans ce cas, l'objet dans la liste sont de « entité ». Ils seront mis en cache.

Cependant, je me demande si le cache fonctionnerait si le hql est comme ceci:

hql="select new Result(count(xx),sum(xxx)) from Entity en ...."; 

class Result{ 
    long num; 
    long sum; 
    //constructor,getter and setter 
} 

Maintenant, le type des objets dans la liste des résultats sera Résultat.

List<Result> list=q.list(); 

Ma question est de savoir si l'objet de résultat peut être sauvegardé au cache de second niveau?

Egalement comment sur le ResultTransformer?

q.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); 

Dans ce cas, le type des objets dans le q.list() sera Carte, ces cartes ne peuvent être mises en cache aussi?

Répondre

0

Cela fonctionne certainement pour "new Result (...)" mais je ne suis pas sûr à 100% sur le ResultTransformer. Je ne vois pas pourquoi cela ne serait pas le cas, étant donné que la transformation est effectuée après la requête.

Questions connexes