Как вы сохраняете коллекцию Enums in Grails? - PullRequest
4 голосов
/ 25 февраля 2010

Есть идеи, как сохранить коллекцию перечислений в Grails?

Groovy enum:

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 

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Таким образом, легко было просто изменить класс домена на , а не , используя тип перечисления MyEnum для переменной myenums. Вместо этого я изменил его на String , и все начало работать.

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

После дальнейших размышлений мне действительно не нужно было сохранять тип enum вообще. Я просто хотел сохранить значение этого типа.

1 голос
/ 25 февраля 2010

Я не делал hasMany для перечисления ранее, но если вы дадите своим перечислениям свойство id, то hibernate сможет сохранить его в других отношениях (может также работать с hasMany) Вот пример, который я использовал в прошлом:

class Qux {
    ...
    BazType baz
    ...
}


enum BazType {
    FOO('foo'),
    BAR('bar')

    final String id

    BazType(String id) { this.id = id }
}

Предоставление вашему enum-свойству id может дать hibernate достаточно информации для работы. См. Примечания к выпуску Grails 1.1 для получения дополнительной информации.

...