2009-04-02 7 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(); 

代わりのCritera /クエリインスタンス

をreturing
3

これは確かに良いアイデアではありません...

私はあなたが達成しようとしているのかわからないが、私はあなたがDetachedCriteriaクラスを見ているべきだと思います。

これにより、セッションにリンク/接続されていない条件クエリを作成できます。 DetachedCriteriaを実行するには、セッションに添付する必要があります。

3

アクティブなSessionを使用していない場合は、DetachedCriteriaを使用してください。後で(たとえば、クエリを実行するためにアクティブなセッションがあるDAOで)DetachedCriteria#getExecutableCriteriaを使用して実行可能ファイルCriteriaを取得できます。

関連する問題