2009-04-02 6 views
1

Je suppose que ce qui suit est un non non (?)Hibernate Critères API de requête

> public Criteria createCritera(Class<?> persistentClass) { 
>  ...//creation of session object etc. 
>  session.beginTransaction(); 
>  Criteria crit = session.createCriteria(persistentClass); 
>  session.getTransaction().commit(); 
>  session.close(); 
>  
>  return crit; 
} 

OU est-il autorisé à utiliser et à manipuler un objet critera même si l'objet de session utilisé pour créer e critera est fermé et la transaction en cours est validée.

Répondre

0

Si vous essayez de manipuler une requête/critères après la session, qui a créé la requête/critères, est fermée vous recevrez une exception HibernateException à vous. L'exception dira: "session est fermée". Donc, si la technique détachée n'est pas applicable, je recommanderais (moi-même) de toujours retourner le résultat, par exemple.

crit.list(); 
query.list(); 

au lieu de l'returing critera/instance de requête

3

Ce ne sera pas une bonne idée en effet ...

Je ne suis pas sûr de ce que vous essayez d'accomplir, mais je pense que vous devriez jeter un oeil à la classe DetachedCriteria.

Cela vous permet de créer une requête de critères qui n'est pas liée/connectée à une session. Lorsque vous voulez exécuter le DetachedCriteria, vous devez l'attacher à une session, et vous êtes prêt à partir.

Questions connexes