【问题标题】:How do I detect a Composite Primary Key in Grails 3.0?如何在 Grails 3.0 中检测复合主键?
【发布时间】:2015-12-16 11:17:16
【问题描述】:

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

我找不到在公共 API 中检测到这一点的方法。

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

另一种策略是通过targetClass.getIdentifier().getType() 但我找不到任何关于如何使用身份类型检测复合键的文档。

【问题讨论】:

    标签: grails grails-orm grails-3.0 grails-3.0.10


    【解决方案1】:

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

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

    添加到build.gradle:

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

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

    注意。 GORM 开发人员还建议通过PersistentEntityMappingContext 类而不使用GrailsDomainClass,现有的GORM API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2012-06-24
      • 2010-11-09
      相关资源
      最近更新 更多