我被扔到一个现有的Grails项目和我遇到的问题之一是,节省一些批次时,我得到的错误:Cannot set readonly property: programId
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'在哪里?我可以看到'name','startDate','endDate','comments'和'currentStatus',但没有'programId' – 2013-04-26 14:08:03
我不知道是否需要设置它,因为有一个belongsTo = [program:Program ]。 – Catfish 2013-04-26 14:09:24
这不会给你一个'programId'。你将有一个'program.id',但你真的不想这样设置 – 2013-04-26 14:10:15