如何在Grails3.0中检测复合主键?
我目前正在将Grails2.4项目迁移到Grails3.0.10或3.1.0.M3 在Grails 2.4中,以下方法是一种变通方法,允许我检测域类是否具有复合主键:如何在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
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