Dimas Travieso
Dimas Travieso

Reputation: 129

Insert 'id' into a field with foreign key (HQL)

Below are the two tables with their fields:

GuiaDocente: id, curso, modalidad, asignatura_ing

Materia: id, guia_docente_id, modulo, materia, caracter, creditos, unidad_temporal, profesor_asignatura, email, horario_atencion, coordinador_curso, coordinador_modulo

The type of relationship is 'one to one'.

I want to insert all the data and foreign key "guide_docente_id" in the table "Materia". Below, it was show the code...

class InsercionService {

 def insercionMateria(guia_docente_id, modulo, materia, caracter, creditos, unidad_temporal, profesor_asignatura, email,horario_atencion, coordinador_curso, coordinador_modulo){

  def insertMateria = new Materia(guia_docente_id: guia_docente_id, modulo: modulo, materia: materia,
                    caracter: caracter, creditos: creditos, unidad_temporal: unidad_temporal,
                    profesor_asignatura: profesor_asignatura, email: email, horario_atencion:horario_atencion,
                    coordinador_curso: coordinador_curso, coordinador_modulo: coordinador_modulo)

            insertMateria.save(failOnError: true)
 } 
}

However, it shows me an insertion error...

Validation Error(s) occurred during save(): - Field error in object 'generacionGuiasDocentes.guiaDocente.Materia' on field 'guiaDocente': rejected value [null]; codes [generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.GuiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error,materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,materia.guiaDocente.nullable.error.guiaDocente,materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.GuiaDocente,materia.guiaDocente.nullable.error,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,materia.guiaDocente.nullable.guiaDocente,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,materia.guiaDocente.nullable,nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,nullable.guiaDocente,nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,nullable]; arguments [guiaDocente,class generacionGuiasDocentes.guiaDocente.Materia]; default message [La propiedad [{0}] de la clase [{1}] no puede ser nulo]

Caused by: grails.validation.ValidationException: Validation Error(s) occurred during save(): - Field error in object 'generacionGuiasDocentes.guiaDocente.Materia' on field 'guiaDocente': rejected value [null]; codes [generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.GuiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.error,materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,materia.guiaDocente.nullable.error.guiaDocente,materia.guiaDocente.nullable.error.generacionGuiasDocentes.guiaDocente.GuiaDocente,materia.guiaDocente.nullable.error,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.guiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,generacionGuiasDocentes.guiaDocente.Materia.guiaDocente.nullable,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,materia.guiaDocente.nullable.guiaDocente,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,materia.guiaDocente.nullable,nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,nullable.guiaDocente,nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,nullable]; arguments [guiaDocente,class generacionGuiasDocentes.guiaDocente.Materia]; default message [La propiedad [{0}] de la clase [{1}] no puede ser nulo]

Below are the codes...

Controller:

class GuiaDocenteController {
 def insercionMateria(){
        def idGuiaDocente = params.id
        def modulo = params.modulo
        def materia = params.materia
        def caracter = params.caracter
        def creditos = params.creditos
        def unidad_temporal = params.unidad_temporal
        def profesor_asignatura = params.profesor_asignatura
        def email = params.email
        def horario_atencion = params.horario_atencion
        def coordinador_curso = params.coordinador_curso
        def coordinador_modulo = params.coordinador_modulo

        def insercionMateria = insercionService.insercionMateria(idGuiaDocente, modulo, materia, caracter, creditos,
                unidad_temporal, profesor_asignatura, email, horario_atencion, coordinador_curso, coordinador_modulo)

        render insercionMateria as JSON
 }
}

jQuery:

$(document).ready(function () {
//--- asignatura ---
    $(".btnActualizaAsignatura").click(function () {

        for (instance in CKEDITOR.instances) {
            CKEDITOR.instances[instance].updateElement();
        }

        URL = enlaceObjetos.urlIdAsignatura;
        URL2 = enlaceObjetos.urlInsercionAsignatura;
        URL3 = enlaceObjetos.urlActualizacionAsignatura;

        actualizaFormulario(URL, URL2, URL3);
    })
});

function actualizaFormulario(URL, URL2, URL3) {

    var datos, idGuiaDocente, idParam;

    idGuiaDocente = localStorage.getItem("idGuiaDocente");
    idParam = $.param({id: idGuiaDocente});

    datos = $("#idFormulario").serialize() + "&" + idParam;

    alert("El resultado es: " + idGuiaDocente);
    alert("Datos: " + datos);

    peticionConDatosCallBackAjax(URL, parseInt(datos), function (data){

        if(data.toString() === ""){
            //se inserta
            alert("El dato es: " + data);

            //*** - insert data in the table Materia - ***
            peticionConDatosCallBackAjax(URL2, datos, function (data){

                if(data.toString()){

                    alert("Success");
                    //muestra un 'Toast' en pantalla'
                    //showToast();
                }
            });

        }else{
            //se actualiza
            alert("Existe el dato: " + data);
        }
    });
}

Domain "GuiaDocente"

class GuiaDocente {

    String curso
    String modalidad
    String asignatura_ing

    static belongsTo = [asignatura:Asignatura]
    static hasOne = [materia:Materia]

    static constraints = {
        curso blank: false
        modalidad blank: false
        asignatura_ing nullable: true
        materia nullable: true
    }
}

Domain "Materia"

class Materia {

    String modulo
    String materia
    String caracter
    String creditos
    String unidad_temporal
    String profesor_asignatura
    String email
    String horario_atencion
    String coordinador_curso
    String coordinador_modulo

    static belongsTo = [guiaDocente:GuiaDocente]

    static constraints = {
        modulo nullable: true
        materia nullable: true
        caracter nullable: true
        creditos nullable: true
        unidad_temporal nullable: true
        profesor_asignatura nullable: true
        email nullable: true
        horario_atencion nullable: true
        coordinador_curso nullable: true
        coordinador_modulo nullable: true
    }
}

Upvotes: 1

Views: 113

Answers (1)

practical programmer
practical programmer

Reputation: 1648

Change your service code to:

 def insercionMateria(guia_docente_id, modulo, materia, caracter, creditos, unidad_temporal, profesor_asignatura, email,horario_atencion, coordinador_curso, coordinador_modulo){
    GuiaDocente guiaDocement = GuiaDocente.read(guia_docente_id)
    def insertMateria = new Materia(guiaDocente: guiaDocement, modulo: modulo, materia: materia,
                                caracter: caracter, creditos: creditos, unidad_temporal: unidad_temporal,
                                profesor_asignatura: profesor_asignatura, email: email, horario_atencion:horario_atencion,
                                coordinador_curso: coordinador_curso, coordinador_modulo: coordinador_modulo)
    insertMateria.save(failOnError: true)
}

There is no such field as guia_docente_id in Material class. Based on your belongsTo you have guiaDocente as object which will generate guiaDocente_id instead of guia_docente_id in this class. You can use object.properties to see all properties of object in groovy

Upvotes: 1

Related Questions