#grails #dns #grails-orm
#grails #dns #grails-orm
Вопрос:
Скажем, у меня есть что-то вроде:
class Foo {
static mapping = {
table 'foo_table'
}
}
Как я могу получить имя foo_table
, если у меня есть ссылка на экземпляр этого объекта?
Ответ №1:
Импорт org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder
.
Чтобы получить имя таблицы из класса домена:
def tableName = GrailsDomainBinder.getMapping(Foo).table.name
И получить имя таблицы из экземпляра класса домена:
def tableName = GrailsDomainBinder.getMapping(foo.class).table.name
Ответ №2:
Ответ Джеймсы будет работать, но только в том случае, если имя таблицы определено явно, как в вопросе.
Если вы хотите получить имя таблицы независимо от того, было ли оно указано в сопоставлении, это можно сделать с помощью SessionFactory
:
def tableName = sessionFactory.getClassMetadata(Foo).tableName
Комментарии:
1. Использование вашего решения для классов 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 }