Добавить префикс к таблице GORM

Допустим, по какой-то причине необходимо добавлять префикс к таблицам доменных классов, создаваемым hibernate’ом.
В таком случае нужно создать свой класс для стратегии именования в src/groovy и отнаследоваться от ImprovedNamingStrategy, затем переопределить метод classToTableName.

Для примера создам класс src/groovy/name/shrewmus/PrefixesNamingStrategy.groovy:

package name.shrewmus
 
import grails.util.Holders
import org.hibernate.cfg.ImprovedNamingStrategy
import org.hibernate.internal.util.StringHelper
 
 
class PrefixesNamingStrategy extends ImprovedNamingStrategy{
 
    String classToTableName(String className){
        //получение префикса из конфига
        String prefix = (Holders.config?.bas?.prefix)? Holders.config.bas.prefix : ""
        prefix + StringHelper.unqualify(className)
    }
 
}

После этого в grails-app/conf/DataSource.groovy для хибернейта указать на использование данной стратегии:

...
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false

    // добавлена вот эта строка
    naming_strategy = name.shrewmus.PrefixesNamingStrategy

// Hibernate 4
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' 
 // configure OSIV singleSession mode
    singleSession = true
}
...

А в grails-app/conf/Config.groovy можно добавить настройку, из которой будет браться префикс:

bas.prefix = "sprsectest_"

Примечание: В тех местах, где нет инъекции grailsApplication, например, в groovy и java классах в src, получить доступ к конфигурации можно через Holders.config.

Leave a Reply

Your email address will not be published. Required fields are marked *