4

次のような 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 (Set) の値が別のコレクションにあるようにクエリするにはどうすればよいですか。

何かのようなもの:

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

[編集] Restriction.sqlRestriction(..) も試しました。私が使用したSQLクエリは次のようなものです:

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

'{expanding?}' はカンマ区切りの疑問符に置き換えられます (targetList.size() によって異なります)。

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

原因: org.hibernate.MappingException: コレクションは関連付けではありませんでした: MyEntity.scalarSet

4

2 に答える 2

4

あなたのセットはコレクションであり、関連マッピングではありません - 微妙ですが重要な違いがあります。コレクションに Hibernate の Query API を使用することは、現在サポートされていません

HQL を使用するか、Long プロパティを持つエンティティを作成して 1 対多の関連付けマッピングを使用する必要があります。次に例を示します。

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}
于 2009-09-03T08:56:38.890 に答える
2

しかし、誰かがHibernate 3.4 で終わるかどうか分からないパッチを書いています。

于 2009-09-03T09:28:30.513 に答える