Я столкнулся с проблемой при обращении с критериями Hibernate в Grails.
Взгляните:
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)
};
Мне нужны только те клиенты, у которых количество посещений в месяц между от и до границ.
Но теперь размер * ограничения применяются ко всем посещениям. Так что, если у клиента есть одно посещение в этом месяце и посещение в предыдущем месяце. И если я установлю из = 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 ('гггг-ММ', '2010-05')
- params.from = 2
критерии должны вернуть этого клиента, а если
не возвращается;
Но это возвращается, потому что sizeGe применяется к всем посещениям, независимо от того, какая дата у них есть.
// END UPD.
Дайте мне знать, если что-то еще не ясно.
Любая помощь приветствуется.
Спасибо, Вова.