Grails найти записи с определенной минутой - PullRequest
1 голос
/ 04 мая 2011

У меня есть несколько классов доменов, которые генерируют большие наборы данных каждую минуту.Примерно так:

class Foo{
    String name
    Date received
    int value
}

Я хочу выполнить тот же набор результатов, который возвращает этот запрос MySQL:

SELECT * FROM foo WHERE received BETWEEN ? AND ? AND MINUTE(received) = ?

Возможно ли это с помощью NamedQuery или findAllBy ...?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 мая 2011

Ну, так как HQL предоставляет минутную функцию, я смог найти решение сам.Поскольку Foo является частью многих других классов, я хотел использовать общий метод для всех них.В любом случае, вот решение для Фу и друзей:

clazz.executeQuery(
'from ' + clazz.getSimpleName() + ' c where c.received between :from and :to 
and minute(received) = :period', [from:d1, to:d2, period:0])

Спасибо, Дон.

0 голосов
/ 05 мая 2011

Чтобы избежать HQL, вы можете использовать sqlRestriction в критериях.Хотя он не поддерживает параметры.

0 голосов
/ 04 мая 2011
// Some arbitrarily chosen values for the query placeholders
Date minReceived = new Date()
Date maxReceived = minReceived + 5    
Integer minute = 0

Foo.findAll( 
    "from Foo where received between :min and :max and minute(received) = :minute", 
    [min: minReceived, max: maxReceived, minute: minute])
...