如何在Grails3.0中检测复合主键?

如何在Grails3.0中检测复合主键?,grails,gorm,grails-3.0,grails-3.0.10,Grails,Gorm,Grails 3.0,Grails 3.0.10,我目前正在将Grails2.4项目迁移到Grails3.0.10或3.1.0.M3 在Grails 2.4中,以下方法是一种变通方法,允许我检测域类是否具有复合主键: void isCompositePrimaryKey(GrailsDomainClass targetClass) { def binder = new GrailsDomainBinder() def idMapping = binder.getMapping(targetClass).identity

我目前正在将Grails2.4项目迁移到Grails3.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中检测这种情况的方法

尽管GrailDomainClass仍然存在于实现源代码中,但我似乎无法从项目中访问它,也无法找到旧的CompositeIdentity

另一种策略可以是通过
targetClass.getIdentifier().getType()

但是我找不到任何关于如何使用标识类型检测复合密钥的文档。

只需为Hibernate 4 GORM实现包的
build.gradle
添加一个额外的显式(非传递)依赖项,就可以解决这个问题

(我通过查看本地gradle文件缓存来确定包和版本,但是
gradle依赖项
也可以工作。)

添加到
build.gradle

compile 'org.grails:grails-datastore-gorm-hibernate4:5.0.0.RC2'`
这允许访问内部API,那么上述方法仍然有效

注意。GORM开发人员还建议,通过
persistenentity
MappingContext
类,而不使用
grailDomainClass
,存在用于此目的的现有GORM API