【发布时间】:2011-12-01 15:58:37
【问题描述】:
假设我有类似的东西:
class Foo {
static mapping = {
table 'foo_table'
}
}
如果我引用了此对象的实例,我如何获得foo_table 的名称?
【问题讨论】:
标签: grails dns grails-orm
假设我有类似的东西:
class Foo {
static mapping = {
table 'foo_table'
}
}
如果我引用了此对象的实例,我如何获得foo_table 的名称?
【问题讨论】:
标签: grails dns grails-orm
导入org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder。
从域类中获取表名:
def tableName = GrailsDomainBinder.getMapping(Foo).table.name
并从域类的实例中获取表名:
def tableName = GrailsDomainBinder.getMapping(foo.class).table.name
【讨论】:
JamesA 的答案会起作用,但前提是表名明确定义,就像问题中一样。
如果你想得到一个表名,不管它是否在映射中指定,都可以使用SessionFactory:
def tableName = sessionFactory.getClassMetadata(Foo).tableName
【讨论】:
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 }