我尝试使用 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 <=: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 的问题。你能用一些官方文档支持我的猜测吗?
谢谢