我如何检测 Grails 3.0 中的复合主键?
How do I detect a Composite Primary Key in Grails 3.0?
我目前正在将 Grails 2.4 项目迁移到 Grails 3.0.10 或 3.1.0.M3。
在 Grails 2.4 中,以下方法是一种变通方法,它允许我检测域 Class 是否具有复合主键:
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()
但我找不到任何关于如何使用标识类型检测复合键的文档。
通过为 Hibernate 4 GORM 实现包向 build.gradle
添加一个额外的显式(非传递)依赖性来解决这个问题。
(我通过查看本地 gradle 文件缓存来确定包和版本,但 gradle dependencies
也可以。)
添加到 build.gradle
:
compile 'org.grails:grails-datastore-gorm-hibernate4:5.0.0.RC2'`
这允许访问内部API,那么上面的方法仍然有效。
注意。 GORM 开发人员还建议,通过 PersistentEntity
和 MappingContext
类 不使用 GrailsDomainClass
.
已经存在 GORM API
我目前正在将 Grails 2.4 项目迁移到 Grails 3.0.10 或 3.1.0.M3。
在 Grails 2.4 中,以下方法是一种变通方法,它允许我检测域 Class 是否具有复合主键:
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()
但我找不到任何关于如何使用标识类型检测复合键的文档。
通过为 Hibernate 4 GORM 实现包向 build.gradle
添加一个额外的显式(非传递)依赖性来解决这个问题。
(我通过查看本地 gradle 文件缓存来确定包和版本,但 gradle dependencies
也可以。)
添加到 build.gradle
:
compile 'org.grails:grails-datastore-gorm-hibernate4:5.0.0.RC2'`
这允许访问内部API,那么上面的方法仍然有效。
注意。 GORM 开发人员还建议,通过 PersistentEntity
和 MappingContext
类 不使用 GrailsDomainClass
.