gpt4 book ai didi

mysql - Grails 2.3.2 : findOrCreate using Enums in Bootstrap

转载 作者:行者123 更新时间:2023-11-29 13:26:39 25 4
gpt4 key购买 nike

我在使用 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 = Guest.findOrCreateByFirstnameAndLastnameAndGender(firstname, lastname, Gender.MALE)
guest.save()

我第一次针对 MySQL 运行应用程序时一切正常。应用程序启动时没有任何错误。如果我第二次运行该应用程序(这次在数据库中使用 guest ),我会遇到以下失败。

| 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 转换为相应的枚举值。谁能告诉我我做错了什么?

最佳答案

试试这个 - 将参数 generateSimpleParameterMetadata=true 添加到您的网址连接字符串中,

...
url = "jdbc:mysql://localhost/bootstraptest?generateSimpleParameterMetadata=true"
...

这与驱动程序解释枚举元数据的方式有关(坦率地说,我不太理解)请参阅 http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

此解决方案非常特定于数据库,因此您不需要任何其他更改

请注意,实际的枚举标签现在将存储在数据库中(“NEW”、“WIP”、“DONE”而不是 0、1、2)

关于mysql - Grails 2.3.2 : findOrCreate using Enums in Bootstrap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com