关于如何在Grails中保留枚举集合的任何想法?
Groovy枚举:
public enum MyEnum {
AAA('Aaa'),
BEE('Bee'),
CEE('Cee')
String description
MyEnum(String description) {
this.description = description
}
static belongsTo = [tester:Tester]
}
我想在Grails域类中使用此枚举。域类看起来像这样:
class Tester {
static hasMany = [myenums: MyEnum]
static constraints = {
}
}
在我的create.jsp中,我希望能够选择多个MyEnum并拥有以下行:
<g:select from="${MyEnum?.values()}" multiple="multiple" value="${testerInstance?.myenums}" name="myenums" ></g:select>`
我遇到的问题是当我尝试创建一个新测试程序时,我收到500错误说:
Exception Message: java.lang.String cannot be cast to java.lang.Enum
Caused by: java.lang.String cannot be cast to java.lang.Enum
Class: TesterController
答案 0 :(得分:2)
因此,简单的解决方法是将域类更改为而不是使用myenums变量的 MyEnum 枚举类型。相反,我将其更改为字符串,一切都开始工作了。
class Tester {
static hasMany = [myenums:String]
static constraints = {
}
}
经过进一步的反思,根本没有必要坚持使用enum类型。我只想保存该类型的值。
答案 1 :(得分:1)
我之前没有对枚举进行过hasMany,但是如果你给你的枚举一个“id”属性,那么hibernate将能够将它保存在其他关系中(也可以与hasMany一起使用)。这是我过去使用过的一个例子:
class Qux {
...
BazType baz
...
}
enum BazType {
FOO('foo'),
BAR('bar')
final String id
BazType(String id) { this.id = id }
}
给你的枚举一个id属性可能会给hibernate足够的信息。有关详细信息,请参阅Grails 1.1 release notes。