【问题标题】:Insert 'id' into a field with foreign key (HQL)将“id”插入具有外键(HQL)的字段中
【发布时间】:2018-01-06 01:22:41
【问题描述】:

下面是两张表及其字段:

GuiaDocente: id、curso、modalidad、asignatura_ing

材料: id、guia_docente_id、模数、材料、字符、creditos、unidad_temporal、profesor_asignatura、电子邮件、horario_atencion、 coordinador_curso, coordinador_modulo

关系类型是'一对一'。

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

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.guiaerror.Doceracionia .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.DocentaMateria .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,nullable。 generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,nullable.guiaDocente,nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,nullable]; 论据 [guiaDocente,class genracionGuiasDocentes.guiaDocente.Materia];默认消息 [La propiedad [{0}] de la case [{1}] no puede ser nulo]

原因:grails.validation.ValidationException:验证错误 在保存()期间发生: - 对象中的字段错误 '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.guiaerror.Doceracionia .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.DocentaMateria .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,nullable。 generacionGuiasDocentes.guiaDocente.Materia.guiaDocente,nullable.guiaDocente,nullable.generacionGuiasDocentes.guiaDocente.GuiaDocente,nullable]; 论据 [guiaDocente,class genracionGuiasDocentes.guiaDocente.Materia];默认消息 [La propiedad [{0}] de la case [{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);
        }
    });
}

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

域“材料”

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

【问题讨论】:

    标签: jquery grails hql grails-orm


    【解决方案1】:

    将您的服务代码更改为:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 2021-12-31
      • 2010-12-19
      • 2021-07-31
      相关资源
      最近更新 更多