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で、複数の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 
4

2 に答える 2

2

したがって、簡単な修正は、myenums 変数にMyEnum列挙型を使用しないようにドメイン クラスを変更することでした。代わりに、文字列に変更すると、すべてが機能し始めました。

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

さらに考えてみると、列挙型を永続化する必要はまったくありませんでした。その型の値を保存したかっただけです。

于 2010-02-25T17:03:49.497 に答える
1

以前に列挙型に hasMany を実行したことはありませんが、列挙型に「id」プロパティを指定すると、休止状態は他の関係でそれを永続化できます (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 に答える