是否有可能强制Grails / Gorm不在插入中包含列?

时间:2012-09-17 20:50:56

标签: grails gorm

例如,假设我想将该列设置为数据库默认的列,而不重新定义域类中的默认值?

我通过谷歌找不到多少。有提示,如果我直接使用Hibernate,我可以将该特定列/属性设置为私有,这可能会实现我所寻求的。

我当然可以将该列保留为未定义,GORM会忽略它。但是每当Grails应用程序执行选择时,我都需要它的值。

2 个答案:

答案 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

这不是一个完整的答案,但我希望这会有所帮助。