2009-08-19 6 views
2

に、私は次のようになりますHibernateマッピングを持っています。このことを考えるとHibernateの基準が含まれているイン関連の表

<class name="MyEntity"> 
    <set name="scalarSet" table="(select fk, scalar_value from other_table)"> 
    <key column="fk"/> 
    <property column="scalar_value" type="long"/> 
    </set> 
</class 

、私は、このようなMyEntity.scalarSetの値はそのクエリんか(ありますセット)は別のコレクションにあります。私もRestriction.sqlRestriction(..)を試してみた

criteria.add(Restrictions.in("scalarSet", targetList)); 

[編集] :よう

何か。私が使用したSQLクエリは次のようなものです:

"1 == (select fk, scalar_value from other_table where fk = {alias}.id and scalar_value in ({expanding?})" 

そのうち「{?拡大}」カンマで区切られた疑問符(targetList.sizeに応じて())に置き換えられます。

しかし、私はちょうど取得しています

によって引き起こさ:org.hibernate.MappingException:あなたのセットは、コレクションではなく、団体である

答えて

3

MyEntity.scalarSet:コレクションは関連はなかったですマッピング - 微妙ではあるが重要な違いがあります。コレクションのためのHibernateのQuery APIの使用は現在not supportedです。

あなたはHQLを使用するか、または例えば、ロングプロパティを持つエンティティを作成することにより、1対多関連のマッピングを使用するか必要があります。

public class Scalar { 
    private Long value; 
    public Long getValue() { .... } 
    public void setValue(....) { ....} 
} 
+1

ありがとう、ハイバーネーションのソースをハックした後、これは私がやったことです:-) –

2

は、しかし、誰かがいるかもしれないまたは5月patchを書いていますHibernate 3.4で終わらない

関連する問題