-1

私のGrailsアプリには、プロパティを持つドメインクラスがあります

SearchPrivacy searchPrivacy = SearchPrivacy.PUBLIC

SearchPrivacy は列挙型です

enum SearchPrivacy {
    PRIVATE('pr'), PUBLIC('pu');

    final String id

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

    static getEnumFromId(String id) {
        values().find {it.id == id}
    }
}

Grails docs によると、マップされたデータベース列には、prまたはプロパティpuの値が格納されますid。ただし、DB 列の最大長を減らす方法はないようです。次の両方を追加しようとしました

static constrtaints = {
    searchPrivacy(size: 2..2, maxSize: 2)
}

しかし、生成されたスキーマでは、列はまだvarchar(255)

ありがとう、ドン

4

3 に答える 3

1

これがどのように grails に変換されるかはわかりませんが、Java では@Column(length=2)、プロパティの注釈で行われます。

于 2010-01-27T21:05:31.983 に答える
0

制約は、保持できるものを制限するだけです。

永続化される実際の SQL タイプを変更したい場合は、ドメイン クラスで「マッピング」と呼ばれる静的プロパティを宣言する必要があります。これは、既に制約に対して行っているのと同じです。次のようになります。

static mapping = {
  searchPrivacy type: SearchPrivacy, {
    sqlType: "char(2)"
  }
}

休止状態から取得したデータベースの独立性が失われる可能性があるため、自分が sqlType 属性を使用していることに気付いたときは、常に注意を払う必要があります。(すべてのデータベースが同じタイプをサポートしているわけではないことに注意してください。)

「マッピング」プロパティを使用して、カスタム列名、複合キー、ID 生成戦略などを処理することもできます。

これが役立つことを願っています!

于 2010-01-27T21:15:57.493 に答える
0

バグかもしれません。バグレポートを提出することを考えましたか?

于 2010-01-28T03:34:31.540 に答える