GORM が作成する一連の ID の代わりに、GORM が作成するすべてのテーブルの ID として 16 桁の乱数を使用したいと考えています。その方法について助けが必要です。やってみた
静的マッピング = { ID ジェネレーター: 'uuid2' }
それはうまくいきませんでした。助けていただければ幸いです
GORM が作成する一連の ID の代わりに、GORM が作成するすべてのテーブルの ID として 16 桁の乱数を使用したいと考えています。その方法について助けが必要です。やってみた
静的マッピング = { ID ジェネレーター: 'uuid2' }
それはうまくいきませんでした。助けていただければ幸いです
カスタム ジェネレーターを実行するだけの場合は、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"
}
}
次のような単純なマッピングを使用できます。
class Book {
static mapping = {
id generator:'assigned'
}
def beforeInsert() {
id = YourRandomGenerator.nextInt()
}
}
ID を割り当てるために beforeInsert イベントを使用していることに注意してください。ご挨拶。
以下に示すように、カスタム 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'
}
}