Entrada em lote 0 insert into
10/10/2011 10:16
0
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
Tags: ERRO: Entrada em lote 0 insert into


0
Oi Thamer,

Não precisa incluir o atributo id nas suas classes de domínio. O Grails já vai injetá-los para você.



0
Eu fiz isso, mas não adiantou, continua dando o erro!
E agora?!
10/10/2011 11:55


0
Tem como no seu tratamento de erro chamar o método getNextException() da sua excessão e postar aqui?


0
Desculpe Henrique, sou meio leiga ainda na programação, e não sei bem como fazer isso, vc poderia me dizer?
11/10/2011 10:35


0
Oi Thamer,

é simples: coloque seu código dentro de um try { } catch {}

No catch, basta chamar o método getNextException.
A própria stacktrace estava te dizendo isto:

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


1
Descobri o problema, era na classe de dominio, eu estava colocando Column com C Maiúsculo, e o correto é ser todo minúsculo. Uma amiga me ajudou! Obrigada pela ajuda!
13/10/2011 16:41



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto