Этот вопрос касается использования поля формулы в блоке статического сопоставления в Grails.
Я пытаюсь реализовать очень простой класс домена, который использует сопоставление формулы (производные свойства), но я продолжаю получать«No property found for name [uptime]
», где 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).
edit: Я немного не уверен, следует ли мне добавлять поле свойства для формулы или нет.Если я добавлю поле свойства «Двойное время безотказной работы», утверждение все равно не будет выполнено, но на этот раз, потому что время безотказной работы равно 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_