1

GORM が作成する一連の ID の代わりに、GORM が作成するすべてのテーブルの ID として 16 桁の乱数を使用したいと考えています。その方法について助けが必要です。やってみた

静的マッピング = { ID ジェネレーター: 'uuid2' }

それはうまくいきませんでした。助けていただければ幸いです

4

3 に答える 3

9

カスタム ジェネレーターを実行するだけの場合は、IdentifierGenerator を拡張できます。

class CustomGenerator extends IdentifierGenerator {
    Serializable generate(SessionImplementor session, Object object) {
        return "myroutine"
    }
}

class Book {
    String id
    static mapping = {
         generator:"some.package.CustomGenerator", column:"id", unique:"true"
    }
}
于 2012-09-11T03:22:59.023 に答える
2

次のような単純なマッピングを使用できます。

class Book {
    static mapping = {
        id generator:'assigned'
     }
    def beforeInsert() {
        id = YourRandomGenerator.nextInt()
    }
}

ID を割り当てるために beforeInsert イベントを使用していることに注意してください。ご挨拶。

于 2012-09-11T03:17:52.797 に答える
0

以下に示すように、カスタム ID ジェネレーターを作成できます。

public class CustomIdGenerator implements IdentifierGenerator {

public synchronized Serializable generate(final SessionImplementor session, Object obj) {
        return GENERATED ID; //return generated id 
    }
}

さて、特定のドメインのみに使用したい場合..次に、このようなマッピングクロージャーでそれを行うことができます

mapping = {
        id generator:'packagename.CustomIdGenerator'
    }

ただし、すべてのドメインでカスタム ID ジェネレーターを使用する場合は、Config.groovy で次のように指定すると、すべてのドメインに適用されます。

grails {
  gorm.default.mapping = {
        id column: 'id', generator:'packagename.CustomIdGenerator'
    }
}
于 2016-08-01T15:59:51.993 に答える