是否可以在 grails 中动态映射域对象的表名? [英] Is it possible to map a table name for a domain object dynamically in grails?
本文介绍了是否可以在 grails 中动态映射域对象的表名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个看起来像
class Foo {
String name
static mapping = {
table 'foo'
}
}
但我想做的更像是:
static mapping = {
table "foo_${dynamicVarThatComesFromRequest}"
}
我想知道这是否可能?
谢谢!
推荐答案
这是可能的.您可以添加一个 Hibernate 拦截器来处理所有 SQL 语句,并将您在映射中输入的表名中的某些标记解析/替换为您要使用的实际表名.
It is possible. You can add a Hibernate interceptor to process all SQL statements and parse/replace some token in the table name you enter in the mapping with the actual table name you want to use.
src/groovy/DynamicTableNameInterceptor.groovy :
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)
}
}
grails-app/conf/spring/resources.groovy:
grails-app/conf/spring/resources.groovy:
beans = {
// This is for Grails 1.3.x , in previous versions, the bean name is eventTriggeringInterceptor
entityInterceptor(DynamicTableNameInterceptor)
}
这篇关于是否可以在 grails 中动态映射域对象的表名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文