Назначить значение внешнего ключа в граалях
У меня есть домен с именем District, где я буду вводить только название района, и он работает нормально. У меня есть другой домен с именем Thana, где мне нужно иметь идентификатор района в качестве внешнего ключа, потому что в округе так много танов. И я хочу сохранить имя тана и идентификатор района в качестве значения внешнего ключа в таблице тана. Вот почему я получаю идентификатор района из комбинированного представления addThana. Но когда я присваиваю значение, это дает ошибку. Может кто-нибудь, пожалуйста, помогите мне в этом, пожалуйста? Вот мой процесс ниже:
домен моего района >>
class District {
String districtName
static constraints = {
}
static mapping = {
table('district')
version(false)
}
}
мой домен Тана >>
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 ответа
Это потому, что params.districtId является String, и вы назначаете его свойству типа District.
Таким образом, вы должны сначала получить экземпляр District, с id вы можете использовать это:
thana.district = District.get(params.districtId?.toLong())
Причина в том, что класс Thana хочет, чтобы объект District, а не district_id сохранял округ в качестве основного ключевого отношения к таблице Thana.
Что вы должны сделать более понятным способом.
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());
}
}