3

我尝试使用 Hibernate 执行的查询遇到以下问题。SqlServer 给了我以下异常:

sqlserverexception the value is not set for the parameter number XX

其中 XX 是根据查询中其他过滤器的数量而变化的数字。

我有一个映射文件,它代表我试图从映射的数据库中检索的对象,如下所示:

<hibernate-mapping auto-import="false">
<class name="Employee" table="e2_per_dipendenti" batch-size="250">
    <id name="id" column="id" >
        <generator class="guid"/>
    </id>

...other fields...

<many-to-one name="currentSegment" lazy="false"
                formula="(select sd.fk_e0_prof_nodo from e1_tur_stati_dip sd 
              where sd.dt_efficacia &lt;=:filtroStatoOperativo.dataRif 
              )"/>  

<filter-def name="filtroStatoOperativo">
    <filter-param name="dataRif"  type="calendar"/>
</filter-def>

可以看到在多对一的公式里面用到了过滤器。

然后我尝试进行这样的查询,启用过滤器并为其设置值:

Session session = sessionManager.getFilteredSession(FilterType.NODO);
String sql = "from " + Employee.class.getName() + " dip";

GregorianCalendar oggi = GeneralUtil.getDate(new GregorianCalendar());
        Filter f = session.enableFilter("filtroStatoOperativo");
        f.setParameter("dataRif", oggi);

Query query = session.createQuery(sql);
List<Employee> result = (List<Employee>)query.list();

也许我做错的是尝试使用带有 hql 的查询而不是使用标准的查询?(由于查询很大,我还没有尝试使用 Criteria 进行翻译)

编辑:我尝试在模型查询中(在同一个映射的 bean 上)使用 Criteria 而不是 hql,并且这个技巧有效。所以我想这是过滤器没有像我想象的那样使用 HQL 的问题。你能用一些官方文档支持我的猜测吗?

谢谢

4

0 回答 0