如何获取表GORM对象的名称映射到?

Igo*_*gor 16 dns grails grails-orm

说我有类似的东西:

class Foo {
    static mapping = {
        table 'foo_table'
    }
}
Run Code Online (Sandbox Code Playgroud)

foo_table如果我有对此对象的实例的引用,我怎么能得到名称?

jam*_*man 24

导入org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder.

要从域类获取表名:

def tableName = GrailsDomainBinder.getMapping(Foo).table.name 
Run Code Online (Sandbox Code Playgroud)

并从域类的实例获取表名:

def tableName = GrailsDomainBinder.getMapping(foo.class).table.name
Run Code Online (Sandbox Code Playgroud)


Ale*_*rov 13

JamesA的答案将起作用,但只有表格名称明确定义,如问题中所示.

如果您希望获取表名,无论是否在映射中指定了表名,可以使用SessionFactory以下命令完成:

def tableName = sessionFactory.getClassMetadata(Foo).tableName
Run Code Online (Sandbox Code Playgroud)

  • 使用适用于java类的解决方案:`String getTableName(String fullyQualifiedClassName){String tableName =""if(fullyQualifiedClassName){Class thisClass = Class.forName(fullyQualifiedClassName,true,Thread.currentThread().getContextClassLoader())def domainObjectInstance = thisClass .newInstance()def grailsApplication = domainObjectInstance.domainClass.grailsApplication tableName = grailsApplication.mainContext.getBean("sessionFactory").getClassMetadata(thisClass).tableName} return tableName}` (3认同)