Как определить составной первичный ключ в 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
,