从grails域的属性获取数据库列名称
我使用我的域对象映射了一堆遗留表。 有没有办法在Domain类中查找属性的数据库列名(反之亦然)? 例如:
class Person {
String firstName
.
.
.
}
有没有办法使用firstName取回字符串“FIRST_NAME”或“first_name”? 我试过使用
GrailsDomainBinder.getMapping(Person).columns
但由于某种原因,这只会给我id列。 谢谢!
好的,我想这是你要找的。 鉴于以下领域
class Company {
String name
String logoUrl
static mapping = {
table 'people'
name column: 'my_name'
logoUrl column: 'lo_go_url'
}
}
您可以使用以下命令检索域数据:
def result = GrailsDomainBinder.getMapping(Company).columns
println result['logoUrl'].column //prints 'lo_go_url'
您也可以使用以下关闭打印出所有列名称:
result.each{ key, val -> // The key is the attribute name in the class (i.e. name, logoUrl)
PropertyConfig prop = val // This is not needed, but I wanted to show the type being used. You could just call val.column below.
println prop.column // This would print out 'my_name', 'lo_go_url'
}
希望这可以帮助!
我只是把这些代码扔在一起,所以请不要打扰我的风格。 :-)
尝试将它放入PersonController
的测试操作方法中,并添加我的import语句和sessionFactory
,如下所示:
import org.hibernate.persister.entity.AbstractEntityPersister
import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass
class PersonController {
// This should get injected by Grails automatically
def sessionFactory
....
def myTestAction() {
def domainClazz = grailsApplication.getClassForName("com.test.Person")
def clazzMetadata = sessionFactory.getClassMetadata(domainClazz)
def AbstractEntityPersister abstractEntityPersister = (AbstractEntityPersister) clazzMetadata
def grailsDomainClazz = new DefaultGrailsDomainClass(domainClazz)
def grailsDomainClazzProperties = grailsDomainClazz.getProperties()
grailsDomainClazzProperties.each() {
println "Property Name: ${it.name}"
abstractEntityPersister.getPropertyColumnNames(it.name).each() {
println "DB Column: ${it}"
}
}
}
}
我能够以一种有点冒失的方式获得它:
def dbColumnNames = sessionFactory.getClassMetadata(clazz).propertyMapping.getColumnNames(fieldName)
这将返回一个字符串数组,其中第一个元素应该是该字段的DB列名称。
适用于Grails 2.3.6
链接地址: http://www.djcxy.com/p/37095.html上一篇: Getting the database column name from the property of a grails domain