我目前正在将Grails 2.4项目迁移到Grails 3.0.10或3.1.0.M3。
在Grails 2.4中,以下方法是一种变通方法,允许我检测DomainClass是否具有复合主键:
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 dependencies
也可以。)
添加到build.gradle
:
compile 'org.grails:grails-datastore-gorm-hibernate4:5.0.0.RC2'`
这允许访问内部API,那么上述方法仍然有效。
注:。GORM开发人员还建议,通过PersistentEntity
和MappingContext
类,而不使用GrailsDomainClass
,现有的GORM API可以实现这一点。