2015-12-16 6 views
0

В настоящее время я переношу проект Grails 2.4 на Grails 3.0.10 или 3.1.0.M3.Как определить составной первичный ключ в Grails 3.0?

В 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 
} 

Я не могу найти способ, чтобы обнаружить это в Public API.

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

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

ответ

0

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

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

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

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

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

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