我们试图做的是创建一个具有多个包名称的 grails 应用程序。每个包名称将代表不同的业务实体和功能。
本质上,一个 grails 应用程序项目中有多个 grails 应用程序,每个应用程序都由自己的包表示。
然后,我们希望根据包名称为表添加唯一前缀,而不必为域类名称添加前缀或在每个域类上使用静态映射。这DefaultNamingStrategy
适用于处理项目中每个域类的表前缀。
我遇到的问题是访问classToTableName
方法中调用的每个域类名称字符串的项目包名称。对于传递给classToTableName
方法的每个域类字符串,我需要用户定义的项目包名称来区分应该根据包名称在表上分配的唯一前缀。
getArtefacts
为了使用, 或访问项目包名,我尝试了几种不同的方法GroovyClassLoader
,但输出是 java.lang 或 grails.commons 包。
任何可以提供的帮助将不胜感激。下面的CustomNamingStrategy
类已在项目的 groovy 文件夹中创建,并在 DataSource.groovy 文件的 hibernate 部分中引用。
class CustomNamingStrategy extends DefaultNamingStrategy {
String classToTableName( String className ) {
def packageName
def prefix = ""
// How do I access the package name of the domain class using className string?
if (packageName == 'recordretention'){
prefix = "Rr"
}
className = prefix + className
covertFromCamelCase(super.classToTableName(className))
}
String covertFromCamelCase(String input) {
GrailsNameUtils.getNaturalName(input).replaceAll("\\s", "_").toUpperCase();
}
}