chalice "Cannot set readonly property: programId"

标签 grails

我被扔进了一个现有的 Grails 项目,我遇到的问题之一是,当批量保存某些内容时,我收到错误:无法设置只读属性:programId

这是导致错误的我的保存片段

// Create a batch
def batch = new Batch()
batch.name = session.batch_name
batch.startDate = new Date()
batch.endDate = new Date()
batch.programId = 120
if(batch.save()) {
  ...
}

这是我的批处理域类

class Batch  extends AbstractDomainObject{
    String name
    Date startDate
    Date endDate
    String comments
    StatusType currentStatus

    static belongsTo = [program:Program]    

    static constraints = {
        name(blank:false,maxSize:100)
        startDate()
        endDate()
        comments (nullable:true, maxSize:DEFAULT_SIZE_OF_COMMENTS)
        currentStatus(nullable:true)
    }
    static transients= ["currentStatus"]

    static mapping = {
        id column:'batch_id', generator:'sequence', params:[sequence:'sq_batch']
        currentStatus column:'status_type_id'
        program column:'program_id'
        statuses sort:'statusDate'
        startDate type:'date'
        endDate type:'date'
    }

    public String toString(){
        return name
    }


    public Date createdDate(){
        Date date=null
        if(this?.statuses?.size()>0){
            this?.statuses.each{
                if(it.status.value==SystemConstants.STATUS_PENDING){
                    date = it.statusDate
                }
            }
        }
        return date

    }
}

为什么它不允许我设置programId

最佳答案

programId 是一个动态属性,它可以为您提供 program 实例的 id,而无需从数据库加载它,但它是一个没有 setter 的 getter。如果您想设置引用而不产生加载整个实例的成本,请改用:

batch.program = Program.load(120)

load 使用仅存储 id 的代理,并且不会访问数据库,除非您调用方法或访问 id 以外的属性。因此它在这里可以工作,因为 Hibernate 只需要它的 id 来进行最终运行的 SQL 插入。

关于 chalice "Cannot set readonly property: programId",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16238272/

相关文章:

mongodb - mongodb grails简单应用程序超时

Grails 3 hasOne 可空性问题

xml - Grails 3-具有XML的Marshaller

rest - Grails Spring Security REST 插件 - token 存储失败

grails - 在 Grails Spring Security 身份验证期间获取 Principal

grails - Grails:MySQL和mongoDB一起

gradle - 为什么 “grails assemble”和 “gradle assemble”产生不同的WAR存档

hibernate - 避免在grails中加入表

grails - ImageMagick与Grails

grails - Grails-在重定向参数中发送对象列表