Критерии перехода в спящий режим содержат указание на связь с таблицей

StackOverflow https://stackoverflow.com/questions/1303157

Вопрос

У меня есть отображение гибернации, которое выглядит примерно так:

<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.спящий режим.Исключение MappingException:коллекция не была ассоциацией:MyEntity.скалярНый набор

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top