2009-04-02 2 views
1

Я предполагаю, что следующее является не нет (?)Hibernate Критерии запроса API

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

ИЛИ это нормально использовать и манипулировать объект Critera даже если объект Session используется для создания й Critera закрыт и текущая транзакция совершена.

ответ

0

Если вы попытаетесь манипулировать Query/Critera после сеанса, который создал Query/Critera, он будет закрыт, и вы получите исключение HibernateException. Исключение будет сказано: «сессия закрыта».

Так что если метод «Отдельно» не применим, я бы рекомендовал (мне) всегда возвращать результат, например.

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

вместо returing в Critera/экземпляр Query

3

Это не будет хорошей идеей, на самом деле ...

Я не уверен, что вы пытаетесь достичь, но я думаю, вы должны смотреть на DetachedCriteria класса.

Это позволяет создать запрос Критерии, который не связан/не связан с сеансом. Когда вы хотите выполнить DetachedCriteria, вы должны прикрепить его к сеансу, и вам хорошо идти.

3

Используйте DetachedCriteria, если у вас нет активного Session для работы. Позже (скажем, в DAO, где у вас есть активный сеанс для выполнения запроса), вы можете использовать DetachedCriteria#getExecutableCriteria для получения исполняемого файла Criteria.

Смежные вопросы