grails DefaultGrailsDomainClass.getIdentifier始终返回' id作为标识符

时间:2016-12-23 20:19:29

标签: grails groovy grails3

我试图为基于角度的CRUD应用程序编写生成器(脚手架,但客户端,使用角度)

部分内容包括从GORM中提取元信息 现在,显然,我已经撞上了坚硬的墙。

我想处理ID字段未生成但由应用程序管理的情况。 假设我有一个类定义,如:

@Resource(readOnly = false, formats = ['json', 'xml'])
class Phone {

    int age
    String phoneId
    String imageUrl
    String name
    String snippet

    static mapping = {
        id name: 'phoneId', generator: 'assigned'
}

    static constraints = {
        snippet(nullable: true, maxSize: 2000)
    }
}

我想检索作为此课程标识符的字段,这里应该是' phoneId'。

但如果我要求:

grailsApplication.getDomainClass(com.phonecat.Phone.getName()).identifier

我得到的是一个属性,称为“id' long类型:

DefaultGrailsDomainClassProperty@6e59cb9b name = 'id', type = Long, persistent = true, optional = false, association = false, bidirectional = false, association-type = [null]]

我是否误用了getIdentifier方法? 我错过了什么吗? 或者我在Grails / GORM中遇到了一个错误?

为了完整性,这里是我使用的GORM版本(据我所知......最近在gorm方面发生了很多变化......):

来自build.groovy:

compile "org.grails.plugins:hibernate5"
compile "org.hibernate:hibernate-core:5.1.2.Final"
compile "org.hibernate:hibernate-ehcache:5.1.2.Final"

另外,我使用grails控制台插件来运行这些测试:

runtime 'org.grails.plugins:grails-console:2.0.6'

(我觉得很棒) 但可能在正常的命令行控制台中运行相同的内容。

以下是我使用的代码:

import com.phonecat.*

println grailsApplication.getDomainClass(Phone.getName()).identifier

def d = grailsApplication.getDomainClass(Phone.getName())
println "${d.class} ${d.clazz.name} ${d.identifier}"

def pd = Phone.findAll().each {c ->
    println "${c.id} ${c.phoneId}"
}
null

问题是:假设(实际上恰好是......)我正在编写一个插件来检索有关域类的元信息;如何从GORM获取此课程已分配到该字段的信息' phoneId'作为唯一标识符,这是我通过REST查询资源时应该看到的值吗?

1 个答案:

答案 0 :(得分:0)

如果要检查模型的映射,通常应该使用GORM API而不是GrailsDomainClass。要做到这一点,你需要获得MappingContext的引用(它可以是Spring注入的依赖项)。然后:

 PersistentEntity entity = mappingContext.getPersistentEntity(Phone.name)
 println entity.identity.name