Какой лучший способ определить генерацию пользовательских идентификаторов по умолчанию в Grails? - PullRequest
6 голосов
/ 23 ноября 2010

Я хочу переключить свои доменные классы, чтобы использовать UUID переменной длины для их идентификаторов.Я не хочу просто отображать последовательные идентификаторы в URL, чтобы люди могли с ними связываться.Я написал специальную версию метода Java UUID для переменной длины, поэтому у меня могут быть более короткие идентификаторы для моделей, которые не станут большими.

Я нашел этот поток, объясняющий, как изменить отображение по умолчаниютак что я могу изменить на «назначенный». Изменение генерации идентификатора для плагина Grails

Каков наилучший способ настройки по умолчанию beforeInsert (для создания пользовательского UUID) и указания Grails, что я хочу использовать строки для идентификаторов вместо целых чисел?

Я попытался добавить grails.gorm.default.beforeInsert в конфигурацию, но это не сработало.

Ответы [ 2 ]

8 голосов
/ 23 ноября 2010

Чтобы заставить grails использовать строки для идентификаторов, просто объявите свойство String id. Чтобы заполнить его пользовательским UUID, я бы использовал генератор идентификатора гибернации вместо beforeInsert. Создайте класс, который расширяет org.hibernate.id.IdentifierGenerator, затем добавьте отображение генератора идентификаторов, подобное этому, в класс вашего домена:

class MyIdGenerator extends IdentifierGenerator {
    Serializable generate(SessionImplementor session, Object object) {
        return MyUUID.generate()
    }
}

class MyDomain {
    String id
    static mapping = {
        id generator:"my.package.MyIdGenerator", column:"id", unique:"true"
    }
}
2 голосов
/ 11 августа 2013

Этот вопрос старый, но он все еще появляется в поисках.На данный момент это лучший способ сделать это, около Грааля 2.3.(Я использую postgres, поэтому обратите внимание на тип "pg-uuid". Адаптируйте его к вашему конкретному хранилищу данных).

UUID uuid    
static mapping = {
    uuid generator: 'uuid2', type: 'pg-uuid'
    ...
}
...