插入' id'进入具有外键(HQL)的字段

时间:2017-07-30 11:50:32

标签: jquery grails hql gorm

以下是两个表及其字段:

  

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

关系的类型是'一对一

我想插入所有数据和外键" guide_docente_id"在表格" Materia"。下面是显示代码......

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)
 } 
}

但是,它显示了插入错误...

  

验证在save()期间发生错误: - 对象中的字段错误   ' generacionGuiasDocentes.guiaDocente.Materia'在场上' guiaDocente':   被拒绝的价值[null];代码   [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 .nu​​llable.generacionGuiasDocentes.guiaDocente.GuiaDocente,generacionGuiasDocentes.guiaDoce nte.Materia.guiaDocente.nullable,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,materia.guiaDocente.nullable.guiaDocente,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,materia.guiaDocente.nullable,可为空。 generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,nullable.guiaDocente,nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,可为空]。   参数[guiaDocente,class   generacionGuiasDocentes.guiaDocente.Materia];默认消息[La   propiedad [{0}] de la clase [{1}] no puede ser nulo]

     

引起:grails.validation.ValidationException:验证错误   在save()期间发生: - 对象中的字段错误   ' generacionGuiasDocentes.guiaDocente.Materia'在场上' guiaDocente':   被拒绝的价值[null];代码   [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 .nu​​llable.generacionGuiasDocentes.guiaDocente.GuiaDocente,generacionGuiasDocentes.guiaDoce nte.Materia.guiaDocente.nullable,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,materia.guiaDocente.nullable.guiaDocente,materia.guiaDocente.nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,materia.guiaDocente.nullable,可为空。 generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,nullable.guiaDocente,nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,可为空]。   参数[guiaDocente,class   generacionGuiasDocentes.guiaDocente.Materia];默认消息[La   propiedad [{0}] de la clase [{1}] no puede ser nulo]

以下是代码......

控制器:

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
    }
}

1 个答案:

答案 0 :(得分:0)

将您的服务代码更改为:

 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)
}

guia_docente_id课程中没有Material这样的字段。根据您的所有权,您将guiaDocente作为对象,在此课程中将生成guiaDocente_id而不是guia_docente_id。您可以使用object.properties查看groovy中对象的所有属性