将 '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)
}
Material
class中没有guia_docente_id
这样的字段。根据你的 belongsTo,你有 guiaDocente
作为对象,它将在这个 class 中生成 guiaDocente_id
而不是 guia_docente_id
。您可以使用 object.properties 查看 groovy
中对象的所有属性
下面是两个 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)
}
Material
class中没有guia_docente_id
这样的字段。根据你的 belongsTo,你有 guiaDocente
作为对象,它将在这个 class 中生成 guiaDocente_id
而不是 guia_docente_id
。您可以使用 object.properties 查看 groovy