Vin*_*nny 5 database grails grails-orm
我有一个看起来像的域名
class Foo {
String name
static mapping = {
table 'foo'
}
}
Run Code Online (Sandbox Code Playgroud)
但我想做的更像是:
static mapping = {
table "foo_${dynamicVarThatComesFromRequest}"
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是这是否可能?
谢谢!
有可能的.您可以添加一个Hibernate拦截器来处理所有SQL语句,并解析/替换您在映射中输入的表名中的一些标记,其中包含您要使用的实际表名.
src/groovy/DynamicTableNameInterceptor.groovy:
import org.hibernate.EmptyInterceptor
public class DynamicTableNameInterceptor extends EmptyInterceptor {
public String onPrepareStatement(String sql) {
// some kind of replacement logic here
def schema=SomeHelperClass.resolveSchema()
return sql.replaceAll('_SCHEMA_', schema)
}
}
Run Code Online (Sandbox Code Playgroud)
的grails-app/CONF /弹簧/ resources.groovy:
beans = {
// This is for Grails 1.3.x , in previous versions, the bean name is eventTriggeringInterceptor
entityInterceptor(DynamicTableNameInterceptor)
}
Run Code Online (Sandbox Code Playgroud)