GrailsのHibernateCriteriaでクエリを実行するときに問題が発生しました。
見てください:
def visitors = Client.withCriteria{
visits{
use ( TimeCategory ) {between('date',date,date+1.month-1)}
}
sizeGe("visits",params.from)
sizeLe("visits",params.to)
fetchMode("visits", FM.JOIN)
};
必要なのは、開始から終了までの月の訪問数が多いクライアントだけです。
ただし、現在、サイズ*の制限がすべての訪問に適用されています。したがって、クライアントが今月に1回訪問し、前月に訪問した場合。そして、from = 2に設定すると、このクライアントが結果になります。しかし、そこにあるべきではありません。
// UPD:sizeGeとsizeLeの制限が期待どおりに機能しないこと。
私の見解では、それらは制限の間に適用されるべきですが、そうではありません。
例えば:
def client = new Client();
client.visits.add(new Visit(date:'2010-03-16'));
client.visits.add(new Visit(date:'2010-05-16'));
client.visits.add(new Visit(date:'2010-05-17'));
client.save();
そして、私は次の場合に必要です:
- date = Date.parse('yyyy-MM'、 '2010-05')
- params.from = 2
基準はこのクライアントを返す必要があり、
- params.from = 3
戻らない;
ただし、sizeGeは、日付に関係なくすべての訪問に適用されるため、戻ります。
//ENDUPD。
smthがまだ明確でない場合は、私に知らせてください。
どんな助けでも大歓迎です。
ありがとう、Vova。