【发布时间】:2013-11-17 13:30:58
【问题描述】:
我在使用 Bootstrap.groovy 中的 findOrCreateBy 方法时遇到问题。
class Guest {
String firstname
String lastname
Gender gender
static constraints = {
firstname blank: false
lastname blank: false
gender nullable: false
}
}
enum Gender {
MALE('male'), FEMALE('female')
final String v
Gender(String s) { v = s }
}
并且在 Bootstrap 中,如果访客还不存在,我会尝试创建它们。
Guest guest = Guest.findOrCreateByFirstnameAndLastnameAndGender(firstname, lastname, Gender.MALE)
guest.save()
我第一次针对 MySQL 运行应用程序时一切正常。应用程序启动时没有任何错误。如果我第二次运行该应用程序(这次是数据库中的访客),我会遇到以下失败。
| Error 2013-11-17 14:27:37,621 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Unknown name value [1] for enum class [ch.silviowangler.ch.cisposiamo.Gender]
Message: Unknown name value [1] for enum class [ch.silviowangler.ch.cisposiamo.Gender]
Line | Method
->> 105 | methodMissing in org.grails.datastore.gorm.GormStaticApi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 106 | createGuest in BootStrap
| 102 | createGuest . . . . . . . . . . in ''
| 66 | doCall in BootStrap$_closure1
| 308 | evaluateEnvironmentSpecificBlock in grails.util.Environment
| 301 | executeForEnvironment in ''
| 277 | executeForCurrentEnvironment . . in ''
| 262 | run in java.util.concurrent.FutureTask
| 1145 | runWorker . . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run . . . . . . . . . . . . . . in java.lang.Thread
这似乎是 Gorm 第一次将值 '0' 和 '1' 写入数据库。在第二次运行中,它无法将这些 0 和 1 转换为相应的枚举值。谁能告诉我我做错了什么?
【问题讨论】:
-
我创建了这个场景,但是,我无法重新创建错误。您确定错误不是来自其他操作吗?
标签: mysql grails enums grails-orm