2016-08-31 6 views
2

私は2つのモデル、クラブと場所があります。クラブは1つの場所のみを持つことができ、場所には多くのクラブを持つことができます。Criteriasを持つHibernateの多対一検索

// some other mappings, foreign key is "location" column in my actual table, as // can be seen below 
<many-to-one name="location" column="location" class="path/to/Club.java"> 

が、私は彼らの場所でクラブを検索する必要があります。

// Club.java 
public class Club { 
    private Location location; 
    // some other attributes and getters/setters 
} 

// Location.java 
public class Location { 
    private int id; // primary key 
    // some attribues and getters/setters 
} 

そして、私の休止状態のマッピングは次のとおりです。私のPOJOクラスでは、私はこれらの2以下のように定義します。私は場所」と "location.id" を交換してみたびID

:ありません関連:そして、私は

Criteria crit = session.createCriteria(Club.class); 
crit.createAlias("location.id", "location"); 
crit.add(Restrictions.eq("location", locationId); 

は、しかし、私はエラー hibernate.QueryExceptionを取得し、以下のようなのcriteriasの使用を作ります"、getterを呼び出すときにIllegalArgumentExceptionが発生しましたLocation.idエラー。これまでのところ、私は両方の方法で目標を達成できませんでした。 Web上で数日間検索していたが、どれも役に立たなかった。ここでの問題は何ですか?

+0

あなたは 'private integer id'を試しましたか?休止状態のプリミティブを使用すべきではありません... – joc

+0

@jocは、問題に関係なく、できます!ありがとう! –

答えて

3

Criteria.createAliasは、エンティティプロパティではなく関連付け用です。 javaドキュメントを参照してください。あなたの条件のために

それは私が、コードをテストしていません

Criteria crit = session.createCriteria(Club.class); 
crit.createAlias("location", "location"); 
crit.add(Restrictions.eq("location.id", locationId); 

ようにする必要があります。それがどうなるかを知ろう。

+0

うん、それは働いた。ありがとうございました! –

関連する問題