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

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

下面是两个 table 及其字段:

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

关系类型为'one to one'

我想在 table "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)
 } 
}

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

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]

下面是代码...

控制器:

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

域名"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
    }
}

将您的服务代码更改为:

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

Materialclass中没有guia_docente_id这样的字段。根据你的 belongsTo,你有 guiaDocente 作为对象,它将在这个 class 中生成 guiaDocente_id 而不是 guia_docente_id。您可以使用 object.properties 查看 groovy

中对象的所有属性