Bom dia a todos!
Estou com um problema que se arrasta a duas semana. Estou trabalhando em um projeto, onde tenho duas classes:
class FonteRecurso {
int id
String nome
Integer ano
BigDecimal valor
Mapps mapps
static mapping ={
table 'juridico.fonte_recurso'
version false
mapps Column: "mapp_id"
}
static constraints = {
nome(blank:true, nullable:true, maxSize:85)
ano(blank:true, nullable:true)
valor(blank:true, nullable:true)
}
}
e:
class Mapps {
static hasMany = [fonteRecurso:FonteRecurso, contratos:Contratos, termosAditivo:TermosAditivo, projetoFinalistico:ProjetoFinalistico]
long id
String mapp
String descricao
BigDecimal valorProgramado
static mapping ={
table 'juridico.mapps'
version false
}
static constraints = {
mapp(blank:false, nullable:false, unique: true, maxSize:10)
descricao(black:true, nullable:true, maxSize:180)
valorProgramado(blank:true, nullable:true)
}
}
E no PostgreSql o esquema das tabelas é desta forma:
[/code]
CREATE TABLE juridico.mapps(
id serial not null primary key,
mapp varchar(10) not null unique,
valor_programado decimal(11,2),
descricao varchar(180)
);
CREATE TABLE juridico.fonte_recurso(
id serial not null primary key,
nome varchar(85),
ano int,
valor decimal(11,2),
mapp_id int,
foreign key(mapp_id)references juridico.mapps(id) on update cascade on delete restrict
);
[/code]
E o controller do fonteRecurso é assim:
[/code]
def create = {
def fonteRecurso
def mapps
if(params.id && !params.id.equals("0")){
fonteRecurso = FonteRecurso.get(params.id)
return [fonteRecurso:fonteRecurso]
}else if(params.mapps && !params.mapps.equals("0")){
mapps = Mapps.get(params.mapps)
fonteRecurso = new FonteRecurso()
fonteRecurso.mapps = mapps
return [fonteRecurso:fonteRecurso, mapps:mapps]
}else{
flash.message = "Escolha um mapps para criar o Fonte Recurso"
redirect(controller:"mapps", action: "list")
}
}
def save = {
def fonteRecurso
def mapps
if(params.id && !params.id.equals("0")){
fonteRecurso = FonteRecurso.get(params.id)
fonteRecurso.properties = params
}else{
fonteRecurso = new FonteRecurso(params)
}
if(params.mappId && !params.mappId.equals("null") ){
mapps = Mapps.get(params.mappId)
fonteRecurso.mapps = mapps
}
if (!fonteRecurso.hasErrors() && fonteRecurso.save(flush: true)) {
flash.message = "Fonte Recurso cadastrado com sucesso!"
redirect(action: "show", id:fonteRecurso.id)
}else {
render(view: "create", model: [fonteRecurso:fonteRecurso])
}
}
[/code]
Quando vou entrar com os dados em fonte recurso dá um erro com a seguinte mensagem:
Grails Runtime Exception
Error Details
Error 500: Executing action [save] of controller [br.gov.ce.secitece.juridico.FonteRecursoController] caused exception: Could not execute JDBC batch update; SQL [insert into juridico.fonte_recurso (ano, mapps_id, nome, valor, id) values (?, ?, ?, ?, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
Servlet: grails
URI: /web-intranet/grails/fonteRecurso/save.dispatch
Exception Message: Entrada em lote 0 insert into juridico.fonte_recurso (ano, mapps_id, nome, valor, id) values ('2011', '496', 'fonte', '50000', '659') foi abortada. Chame getNextException para ver a causa.
Caused by: Entrada em lote 0 insert into juridico.fonte_recurso (ano, mapps_id, nome, valor, id) values ('2011', '496', 'fonte', '50000', '659') foi abortada. Chame getNextException para ver a causa.
Class: FonteRecursoController
At Line: [78]
Code Snippet:
Stack Trace
java.sql.BatchUpdateException: Entrada em lote 0 insert into juridico.fonte_recurso (ano, mapps_id, nome, valor, id) values ('2011', '496', 'fonte', '50000', '659') foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2598)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2737)
at br.gov.ce.secitece.juridico.FonteRecursoController$_closure4.doCall(FonteRecursoController.groovy:78)
at br.gov.ce.secitece.juridico.FonteRecursoController$_closure4.doCall(FonteRecursoController.groovy)
at java.lang.Thread.run(Thread.java:636)
ALGUÉM PODERIA ME AJUDAR, ME DIZER ONDE ESTOU ERRANDO? OBRIGADA