Этот вопрос касается использования поля формулы в блоке статического отображения в Grails.
Я пытаюсь реализовать очень простой доменный класс, использующий сопоставление формул (производные свойства), но я продолжаю получать "No property found for name [uptime]
", где время безотказной работы является производным свойством в доменном классе Grails. Код выглядит следующим образом (упрощенно):
class Derive {
Integer up
Integer down
static mapping = {
uptime formula : "UP/(DOWN+UP)"
}
}
class DeriveTests extends GroovyTestCase {
void testDerivedProp() {
new Derive(up:10, down:5).save()
new Derive(up:5, down:5).save()
assertEquals Derive.all.size(),2
assertEquals 2,Derive.findAllByUptimeGreaterThan(0.1).size() //fails here
assertEquals 2,Derive.findAllByUptimeGreaterThan(10/(10+5)).size()
}
}
Запуск теста дает мне ошибку во втором assertEquals: org.codehaus.groovy.grails.exceptions.InvalidPropertyException: No property found for name [uptime] for class [class Derive]
. Я не могу понять, что я здесь делаю неправильно, поскольку ознакомился как с Grails In Action, так и с ссылаться на документы несколько раз.
Любые подсказки относительно того, что я делаю неправильно? База данных резервного копирования — это HSQLDB, работающая в памяти с настройками по умолчанию (созданная приложением Grails create-app).
редактировать: я немного не уверен, должен ли я добавить поле свойства для формулы или нет. Если я добавлю поле свойства «Двойное время безотказной работы», утверждение все равно завершится ошибкой, но на этот раз потому, что время безотказной работы равно 0. Просмотр объекта в отладчике показывает, что время безотказной работы равно нулю. Тем не менее, вывод sql показывает мне то, что выглядит правильно: hibernate.SQL select this_.id as id6_0_, this_.version as version6_0_, this_.down as down6_0_, this_.up as up6_0_, this_.UP*100/(this_.DOWN+this_.UP) as formula0_0_ from derive this_