Erro salvar foto no banco PostgreSQL
16/04/2011 00:00
0
Bom dia pessoal, tudo bem?

Criei um domain que possui um campo byte[] e estou tentando salvar a foto no banco de dados, porém ocorre o seguinte erro:


Error 500: Executing action [save] of controller [appcertificacoes.EmpresaController] caused exception: Could not execute JDBC batch update; SQL [insert into empresa (version, cnpj, logo_empresa, logo_type, nome_fantasia, razao_social, id) values (?, ?, ?, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Servlet: grails
URI: /appCertificacoes/grails/empresa/save.dispatch
Exception Message&#58; Entrada em lote 0 insert into empresa (version, cnpj, logo_empresa, logo_type, nome_fantasia, razao_social, id) values ('0', '91693531000162', '<stream of 30119 bytes>', 'image/jpeg', 'Feevale', 'Feevale', '8') foi abortada. Chame getNextException para ver a causa.
Caused by&#58; Entrada em lote 0 insert into empresa (version, cnpj, logo_empresa, logo_type, nome_fantasia, razao_social, id) values ('0', '91693531000162', '<stream of 30119 bytes>', 'image/jpeg', 'Feevale', 'Feevale', '8') foi abortada. Chame getNextException para ver a causa.
Class&#58; EmpresaController
At Line&#58; [47]


Meu domain é:

class Empresa {

String CNPJ
String razaoSocial
String nomeFantasia
byte[] logoEmpresa
String logoType

static constraints = {
CNPJ(blank&#58;false, nullable&#58; false, unique&#58; true, cnpj&#58;true, maxSize&#58; 16)
razaoSocial(blank&#58;false, nullable&#58; false, maxSize&#58; 255)
nomeFantasia(blank&#58;false, nullable&#58; false, maxSize&#58; 255)
logoEmpresa(nullable&#58;true, maxSize&#58; 32768 /* 32KB */)
logoType(nullable&#58;true)
}

static hasMany = [enderecos&#58;Endereco]



String toString() {
return &quot;${this.nomeFantasia}&quot;
}

}


e o meu método no controller é:


def save = {
def okcontents = ['image/png', 'image/jpeg', 'image/gif']

def f = request.getFile('logoEmpresa')

def empresaInstance = new Empresa(params)

if( !f.empty ) {

System.out.println(f)

if (! okcontents.contains(f.getContentType())) {
flash.message = &quot;Logo da empresa deve ser dos tipos&#58; ${okcontents}&quot;
render(view&#58;'create', model&#58;[empresaInstance&#58;empresaInstance])
return;
}

empresaInstance.logoEmpresa = f.getBytes()
empresaInstance.logoType = f.getContentType()

} else {
empresaInstance.logoEmpresa = null
}

if (empresaInstance.save(flush&#58; true)) {
flash.message = &quot;${message(code&#58; 'default.created.message', args&#58; [message(code&#58; 'empresa.label', default&#58; 'Empresa'), empresaInstance.id])}&quot;
redirect(action&#58; &quot;show&quot;, id&#58; empresaInstance.id)
} else {
render(view&#58; &quot;create&quot;, model&#58; [empresaInstance&#58; empresaInstance])
}
}



Tentei inserir um registro sem imagem, mas ocorre o mesmo erro.

Alguém utiliza PostgreSQL com foto no banco?

Estou usando a versão 8.2
Tags: Grails


0
Eu tinha um campo na tabela not null que não estava mapeado (criei o domain com o campo e demois removi ele) e o update do Grails não removeu ele do banco automaticamente...
16/04/2011 00:00


0
Eu estou com esse mesmo erro, alguém poderia me dá uma dica, o que seria este erro, onde deveria estar?
05/10/2011 10:25


0
Tem como postar o stacktrace?


0
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)
10/10/2011 09:54


0
AQUI A CLASSE:

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)
}
}
10/10/2011 09:55


0
A OUTRA CLASSE:

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

}
10/10/2011 09:56


0
O CONTROLLER DO FONTE RECURSO:

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])
}
}
10/10/2011 09:57


0
E COMO ESTÁ NO POSTGRESQL:

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
);
10/10/2011 09:58


0
Thamer, não entendi: nas suas tabelas não há nada binário pra salvar. Nenhum campo do tipo blob ou similar.

Visto que você quer persistir uma imagem no banco de dados, isto é no mínimo estranho.

Outra coisa que não entendi: suas classes de domínio também não referenciam nada que se pareça com uma imagem. Não seria melhor abrir um outro post com o seu problema portanto?

(Dica: use o nosso editor para incluir o seu código fonte em suas postagens, assim ele aparece formatado e facilita a leitura dos outros membros)


0
Desculpe, realmente não tem imagem, mas é devido ao erro postado pelo amigo, eu tentei me basear pela mesma lógica, vou abrir e postar em outro. valeu!
10/10/2011 10:05


0
Estamos criando um menu interativo, ou seja um cardapio para restaurante usando grails, eu estou com dificuldade em definir os padroes de imagens que serão inseridas no cardapio.
essa linha de codigo "def okcontents = ['image/png', 'image/jpeg', 'image/gif']" ela esta definindo que so pode ser inserido png, jpeg ou gif.?
Valeu.

26/11/2011 17:26



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