Назначить значение внешнего ключа в граалях

У меня есть домен с именем 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());
}

}
Другие вопросы по тегам