ビジネスフィルターの制約を表現できるようにするには、Criteria APIでyear()関数とmonth()関数を使用する必要があります。のような表現
cri.Add(Expression.Ge("year(Duration.DateFrom)", Year.Value));
cri.Add(Expression.Le("year(Duration.DateTo)", Year.Value));
明らかに機能しません-これを達成する方法はありますか?
HQLで完全に可能であることはわかっていますが、クエリを処理する追加のプロセスがいくつかあり、並べ替えやページングなどが追加されているため、条件APIを使用してクエリを作成する必要があります。
Criteria APIに書き直したいサンプルHQLソリューション:
var ym = year * 100 + month;
var hql = ...(:ym between 100 * year(f.Duration.DateFrom) + month(f.Duration.DateFrom) and 100 * year(f.Duration.DateTo) + month(f.Duration.DateTo)";