例如,假设我想将该列设置为数据库默认的列,而不重新定义域类中的默认值?
我通过谷歌找不到多少。有提示,如果我直接使用Hibernate,我可以将该特定列/属性设置为私有,这可能会实现我所寻求的。
我当然可以将该列保留为未定义,GORM会忽略它。但是每当Grails应用程序执行选择时,我都需要它的值。
答案 0 :(得分:2)
您可以使用可在doc中插入的GORM属性,也可以使用beforeInsert
事件读取值:
class Book {
String title
String isbn
static mapping = {
isbn nullable: false
}
def beforeInsert {
title = queryFromDatabase...
}
}
答案 1 :(得分:1)
我认为您必须使用beforeInsert / Hibernate拦截器路由,因为您需要从现有数据库中读取默认值。
您可以使用JDBC DatabaseMetaData.getColumns读取列的数据库默认值。
要找出数据库表和列名,可以使用这样的代码(此代码未经过测试)
import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder
import org.codehaus.groovy.grails.orm.hibernate.cfg.Mapping
import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler
def gdc=grailsApplication.getArtefact(DomainClassArtefactHandler.TYPE, someInstance.class.name)
Mapping mapping=GrailsDomainBinder.getMapping(gdc)
def tableName=mapping.tableName
def columnName=mapping.getPropertyConfig('someColumn').column
这不是一个完整的答案,但我希望这会有所帮助。