Критерии перехода в спящий режим содержат указание на связь с таблицей
Вопрос
У меня есть отображение гибернации, которое выглядит примерно так:
<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