Критерии гибернации включают в себя связь с таблицей - PullRequest
3 голосов
/ 20 августа 2009

У меня есть отображение 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

Ответы [ 2 ]

3 голосов
/ 03 сентября 2009

Ваш набор является коллекцией, а не отображением ассоциации - есть тонкие, но важные различия. Использование API запросов Hibernate для коллекций в настоящее время не поддерживается .

Вам нужно либо использовать HQL, либо использовать сопоставление «один ко многим», создав сущность со свойством Long, например:

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}
2 голосов
/ 03 сентября 2009

Однако кто-то написал патч , который может оказаться или не оказаться в Hibernate 3.4

...