Как определить составной первичный ключ в Grails 3.0?

В настоящее время я переношу проект Grails 2.4 на Grails 3.0.10 или 3.1.0.M3.

В Grails 2.4 следующий метод представляет собой обходной путь, позволяющий определить, содержит ли класс предметной области составной первичный ключ:

void isCompositePrimaryKey(GrailsDomainClass targetClass) {
    def binder = new GrailsDomainBinder()
    def idMapping = binder.getMapping(targetClass).identity
    return idMapping instanceof org.codehaus.groovy.grails.orm.hibernate.cfg.CompositeIdentity
}

Я не могу найти способ обнаружить это в общедоступном API.

Хотя GrailsDomainClass все еще существует в исходном коде реализации, я не могу получить к нему доступ из своего проекта и не могу найти старый CompositeIdentity.

Альтернативной стратегией может быть использование targetClass.getIdentifier().getType(), но я не могу найти документацию о том, как определить составной ключ с использованием типа идентификатора.


person Matt JB    schedule 16.12.2015    source источник


Ответы (1)


Решил это, просто добавив дополнительную явную (нетранзитивную) зависимость к build.gradle для пакета реализации Hibernate 4 GORM.

(Я определил пакет и версию, просмотрев локальный кеш файлов Gradle, но gradle dependencies тоже сработало бы.)

Добавлено в build.gradle:

compile 'org.grails:grails-datastore-gorm-hibernate4:5.0.0.RC2'`

Это позволяет получить доступ к внутреннему API, тогда описанный выше метод все еще работает.

NB. Разработчики GORM также сообщают, что для этого существует существующий API GORM через классы PersistentEntity и MappingContext без использования GrailsDomainClass.

person Matt JB    schedule 16.12.2015