2011-06-23 4 views
0

私は、休止状態を使用しているプロジェクトに取り組んでいます。 私たちはデータベースを持っていますので、今質問したいと思います。いくつかの基準に一致するオブジェクトを回復する方法はありますか(必ずしもIDではありません)?

理想的なケースでは、オブジェクトのIDまたはHibernateのクエリ言語を使用してオブジェクトを回復できることがわかっています。しかし、フィルタとして使用したい属性を持つオブジェクトを送信するメソッドがあって、そのテーブル内のこれらの条件に一致するすべてのオブジェクトを取り戻す方法があれば、私にとっては最適です。私はHibernateは同様の機能を提供する想像インスタンス

Person p = new Person(); 
p.setName("Junior"); 
p.setAge(10); 
session.Load(Person.class, p); //this would return all "junior" with age = 10 

については 。それは?どちらの方法を使うべきですか?

おかげで、 オスカー

EDIT: @nIKUNJは私が必要なものと非常に類似したものになる基準、に私を示しました。 問題は次のとおりです。保存、ロードなどの機能を処理するDatabaseManagerクラスが必要です。 例えば、私の負荷は次のようになります。

public <T extends Serializable> List<T> load(T filters, Class<T> type) 
{ 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

     List<T> searchResult; 
     session.beginTransaction(); 

     searchResult = ((List<T>)session.get(type, filters)); //assuming the method 
               //I asked for in the question exists 


     return searchResult; 
} 

この道を、私はこの方法には、ほぼすべてのオブジェクトを送信することができるだろうとメソッドは、データベースを照会し、私に一致するオブジェクトのリストを返します基準。

どのように私はこの動作を模倣することができます考えているかどうかは、基準クラスを使用していますか?

おかげで、 オスカー

答えて

1

私は休止状態Criteriaはあなたを助けることができると思います。

parameterクラスには、3つの属性(name, type and value)を使用できます。 Nameはあなたの列の名前になります。typeは、等しい、少ない、大きいなどの条件タイプとなり、valueはその条件の値になります。
たとえば、name="person.age", type = greater equal, value=18。これらのパラメータを基準オブジェクトに変換するユーティリティメソッドを作成します。今

、このような方法で作成します:

public <T extends Serializable> List<T> load(List<Parameter> params, Class<T> type) 
{ 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

     List<T> searchResult; 
     session.beginTransaction(); 
     Criteria criteria = createCriteriaFromParams(params);  
     searchResult = criteria.list(); 

     return searchResult; 
} 

これは非常に単純なシナリオです。パラメータリストに余分な属性を追加することで、複雑な条件を作成することができます。

+0

これはまさに私が欲しかったことでしょう。質問が私の心に浮かんだので、私は現在の質問を最新の状態に保つために更新します。ありがとう:) – JSBach

+0

私は私の答えを更新しました。それを見てください。 – nIKUNJ

+0

これは私を助けると思う。どうもありがとう! :) – JSBach