在grails中分配外键值

时间:2014-05-12 09:28:18

标签: grails grails-2.0 grails-domain-class

我有一个名为District的域名,我只会输入地区名称,而且工作正常。我有另一个名为Thana的域名,我需要将区域ID作为外键,因为区域下面有很多区域。我想将thana名称和区域ID保存为比表中的外键值。这就是我从组合addThana视图获取区ID的原因。但是当我分配给它给出错误的值时。有人可以帮我这个吗?以下是我的流程:

我的分区域>>

    class District {
    String districtName

    static constraints = {
    }

    static mapping = {
        table('district')
        version(false)
    }
}

my thana domain>>

    class Thana {

    String thanaName
    District district

    static constraints = {
    }

    static mapping = {
        table('thana')
        version(false)
        district column: 'district_id'
    }
}

我的保存方法>>

def saveThana(){
    println(params)
    Thana thana = new Thana()

    thana.district = params.districtId
    thana.thanaName = params.thanaName
   thana.save()
}

和错误消息>>

  

消息:       参数类型不匹配

2 个答案:

答案 0 :(得分:1)

那是因为params.districtId是String,你将它分配给类型为Region的属性。

所以你必须首先检索一个区的实例,你可以使用id:

thana.district = District.get(params.districtId?.toLong())

答案 1 :(得分:0)

原因是Thana Class想要一个District Object而不是一个district_id来保存District作为Thana Table的外键关系。

你应该更清楚地做些什么。

def saveThana(){
    println(params)

try {

    Thana thana = new Thana()
    thana.district = District.findById(params?.districtId) //check nulls okay?
    thana.thanaName = params?.thanaName.toString()
    thana.save(failonSave:true)
}
catch(exception ex){
println ("Save Error":ex.getMessage());
}

}