Grails 可以访问域类的groovy脚本
我希望有一个groovy脚本,可以访问我的域类并从中提取所有属性 到目前为止,我还没有在Grails应用程序中编写任何groovy脚本 我该怎么做 我在想类似的事情Grails 可以访问域类的groovy脚本,grails,Grails,我希望有一个groovy脚本,可以访问我的域类并从中提取所有属性 到目前为止,我还没有在Grails应用程序中编写任何groovy脚本 我该怎么做 我在想类似的事情 run-script <scriptname> 运行脚本 在脚本中,我想 For all Domain classes For all Fields println (<database-table-name>.<database-field-name>) 适用于所有域类 适
run-script <scriptname>
运行脚本
在脚本中,我想
For all Domain classes
For all Fields
println (<database-table-name>.<database-field-name>)
适用于所有域类
适用于所有领域
println(.)
实现这一点最简单的方法是什么。下面我提供了一个脚本代码,您可以使用它列出所有域类及其属性。此脚本生成一个映射,其中包含域及其属性的db映射。如果您有不同的需求,可以使用相同的方法来实现
import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass
import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler
import org.codehaus.groovy.grails.orm.hibernate.persister.entity.GroovyAwareSingleTableEntityPersister as GASTEP
import org.hibernate.SessionFactory
//Include script dependencies required for task dependencies
includeTargets << grailsScript("Bootstrap")
target(grailsDomianMappings: "List down field details for all grails domain classes") {
//Task dependencies required for initialization of app. eg: initialization of sessionFactory bean
depends(compile, bootstrap)
System.out.println("Running script...")
//Fetch session factory from application context
SessionFactory sessionFactory = appCtx.getBean("sessionFactory")
//Fetch all domain classes
def domains = grailsApp.getArtefacts(DomainClassArtefactHandler.TYPE)
GASTEP persister
List<String> propertyMappings = []
Map<String, List<String>> mappings = [:]
//Iterate over domain classes
for (DefaultGrailsDomainClass domainClass in domains) {
//Get class meta data
persister = sessionFactory.getClassMetadata(domainClass.clazz) as GASTEP
propertyMappings = []
//fetch table name mapping
String mappedTable = persister.tableName
//fetch all properties for domain
String[] propertyNames = persister.propertyNames
propertyNames += persister.identifierPropertyName
//fetch column name mappings for properties
propertyNames.each {
propertyMappings += persister.getPropertyColumnNames(it).first()
}
mappings.put(mappedTable, propertyMappings)
}
//Print data
mappings.each { String table, List<String> properties ->
properties.each { String property ->
System.out.println("${table}.${property}")
}
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++")
}
}
setDefaultTarget(grailsDomianMappings)
import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass
导入org.codehaus.groovy.grails.commons.DomainClassArtefactHandler
将org.codehaus.groovy.grails.orm.hibernate.persister.entity.GroovyAwareSingleTableEntityPersister作为GASTEP导入
导入org.hibernate.SessionFactory
//包括任务依赖项所需的脚本依赖项
包括目标
properties.each{String属性->
System.out.println(“${table}.${property}”)
}
System.out.println(“++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++”
}
}
setDefaultTarget(grailsDomianMappings)
谢谢这看起来棒极了。我将尽快尝试。我已将上述SKcript放在scripts/domain.groovy下。我尝试使用run script——stacktrace scripts/domain.groovy运行它,但我遇到了以下错误:加载Grails 2.3.5|环境设置为开发错误加载插件管理器:TomcatGrailsPlugin(使用--stacktrace查看完整跟踪)。错误| org.codehaus.groovy.grails.cli.ScriptExitException错误|位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)我可以做些什么来解决?使用--stacktrace运行并尝试查找原因,或者使用更新的stacktrace添加新问题