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 を使用してクエリを使用しようとしていることでしょうか? (クエリは大きなものなので、まだ基準で翻訳しようとはしませんでした)
編集: モックアップ クエリ (同じマップされた Bean) で hql の代わりに Criteria を使用してみましたが、トリックは機能します。だから、HQLを使って思ったようにフィルターが機能しないのは問題だと思います。いくつかの公式ドキュメントで私の推測を裏付けることができますか?
ありがとう