Привет! Я использую Hibernate 3.2 с 1.6 JDK и Mysql 5.0. Я пытаюсь использовать критерии API для создания динамического фильтра. Однако, когда я добавляю ограничение на набор перечислений, которое является свойством моего объекта Criteria, я получаю исключение org.hibernate.exception.GenericJDBCException.
мой код такой:
public class FollowUp {
...
public Set<AdminCategory> getAdminCategories() {...}
public void setAdminCategories(Set<AdminCategory> _arg) { ... }
}
Мой файл отображения hibernate имеет набор значений Enum, как указано в документации по hibernate:
http://docs.jboss.org/hibernate/stable/core/reference/en/html/collections.html#collections-ofvalues. Файл (FollowUp.hbm.xml
) это так
<hibernate-mapping>
<typedef class="dao.util.HibernateAdminCategoryType" name="main-category" />
<class name="FollowUp" table="follow_up">
<!-- other properties here -->
<set name="mainCategories" table="follow_up_main_categories" fetch="join" lazy="false">
<key column="fup_id"/>
<element column="identifier" type="main-category"/>
</set>
<!-- other stuff -->
</class>
</hibernate-mapping>
Код фильтра критериев выглядит следующим образом:
public void runFilter(FollowUpFilter _filter) {
Criteria criteria = this.getSession().createCriteria(FollowUp.class);
if (_filter.hasMainCategories()) {
criteria.add(Restrictions.in("mainCategories", _filter.getMainCategories()));
}
criteria.setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY );
criteria.setProjection(Projections.rowCount());
Integer count = (Integer) criteria.uniqueResult();
_filter.setTotalSize(count);
}
Когда я запускаю свои тесты (с выводом sql), я получаю следующую ошибку:
Statement parameter 1 not set.
org.hibernate.exception.GenericJDBCException: could not execute query
вывод sql выглядит следующим образом:
select
count(*) as y0_
from
follow_up this_
where
this_.id in (
?
)
Кто-нибудь знает правильный способ фильтрации набора значений перечисления в критериях (в Hibernate 3.2)?
Приветствие
Simon