Как получить имя таблицы, к которой сопоставлен объект GORM?

#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 }