質問

私はこのようになります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の値が別のコレクションにあるように照会します。

のような何かます:

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?})"

ここで '{拡張は?}'()targetList.sizeに応じて()コンマで区切られた疑問符で置き換えられている。

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

  org.hibernate.MappingException:

によって引き起こさコレクションは関連がありませんでした:MyEntity.scalarSet

役に立ちましたか?

解決

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

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

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

他のヒント

しかし、誰かがパッチを書きましたまたは休止状態3.4で終わるかもしれない可能性がある。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top