Как определить составной первичный ключ в 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()но я не могу найти документацию о том, как обнаружить составной ключ, используя тип идентификации.

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам