4

关于如何在 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 中,我希望能够选择多个 MyEnums 并具有以下行:

<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 
4

2 回答 2

2

因此,简单的解决方法是仅更改域类以MyEnum枚举类型用于 myenums 变量。相反,我将其更改为字符串,一切都开始工作了。

class Tester {
  static hasMany = [myenums:String]
  static constraints = {
  }
}

经过进一步思考,我真的完全没有必要坚持 enum 类型。我只是想保存该类型的值。

于 2010-02-25T17:03:49.497 回答
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 属性可能会为休眠提供足够的信息来工作。有关详细信息,请参阅Grails 1.1 发行说明

于 2010-02-25T02:52:33.733 回答