如何在Grails 3.0中检测复合主键?

时间:2015-12-16 11:17:17

标签: grails gorm grails-3.0 grails-3.0.10

我目前正在将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
}

我找不到在Public API中检测到这种方法的方法。

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

替代策略可以通过targetClass.getIdentifier().getType() 但我找不到任何关于如何使用身份类型检测复合密钥的文档。

1 个答案:

答案 0 :(得分:0)

通过为Hibernate 4 GORM实现包的build.gradle添加一个额外的显式(非传递)依赖关系来解决这个问题。

(我通过查看本地gradle文件缓存确定了包和版本,但gradle dependencies也可以使用。)

已添加到build.gradle

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

这允许访问内部API,然后上述方法仍然有效。

NB。 GORM开发人员还建议在不使用PersistentEntity的情况下通过MappingContextGrailsDomainClass类提供GORM API。