[Resolvido]Problema para persistir campos Blob

13 respostas
Rafael_Guerreiro

Pessoal, tudo bem?

Então, eu estou tentando persistir multimídias como byte[]… quando o arquivo é pequeno, funciona. Mas quando passa de 1MB, ele não consegue gravar.

Então eu tentei salvar como tipo Blob mesmo. Agora ele salva mas não salva os dados…

minha entidade:

@Lob
	@Column(length = (50 * 1024 * 1024))
	private byte[] arquivo;

	@Lob
	@Column(length = (20 * 1024))
	private byte[] thumbnail;
   // getters e setters

13 Respostas

getAdicted

Olá Rafael,

É um requisito indispensável do seu sistema, persistir a mídia? Por que não reservar o arquivo em um diretório e armarzenar somente o caminho no banco de dados?

[]'s

Rafael_Guerreiro

Então… É… Eu também gostaria de poder fazer isso… Mas para backups, e organização entre clientes, isso é primordial…

getAdicted

Você tem certeza que o gargalo está na sua aplicação, não será no banco de dados? A um tempo atráz eu fiz algo semelhante com JPA+HIBERNATE+PRIMEFACES, o seguinte tópico me ajudou muito:

http://www.guj.com.br/java/212843-fileupload-prime-faces

[]'s

getAdicted

Lembrei de uma coisa,

Você está utilizando MySql?

[]'s

Rafael_Guerreiro

Está dando exception que o arquivo é mto grande… mas ele tem 4MB e eu preciso persistir até 50MB…

getAdicted

Agora eu me recordo, eu mudei o método (armazenar em um diretório) por que eu não consegui configurar esse arquivo:

http://dev.mysql.com/doc/refman/5.0/en/blob.html

Esse exemplo é para o MySql, mas eu acredito que para outros bancos, é possível configurar algo similar.

Qual a exception?

[]'s

getAdicted

Eu não sei se é esse o problema que está impactando, mas no console do PhpMyAdmin, aba variáveis, existe campo max sort lenght, estou olhando aqui e ele está setado com 1024.

[]'s

Rafael_Guerreiro

No banco de dados o campo está como Long Blob…

É um BatchUpdateException e a mensagem que dá é:
Packet for query is too large (4391538 > 1048576). You can change this value on the server by setting the max_allowed_packet’ variable.

getAdicted

Acho que idêntificamos o problema, talvez essa seja uma solução:

http://forums.mysql.com/read.php?35,54533,56470#msg-56470

[]'s

Rafael_Guerreiro

Eu tenho que fazer isso manualmente sempre? Existe alguma forma do Hibernate fazer isso para mim?

getAdicted

Eu não sei há como fazer essa configuração através da aplicação, eu acredito que não, mas após configurado, mesmo que na interface do PhpMyAdmin, tchau e benção. Todos os clientes passarão a compartilhar daquilo nas suas sessões.

Eu consegui configurar aqui:

xampp/mysql/bin

  • Alterar max_allowed_packet no arquivo my.ini, por exemplo, para 500MB
  • Reiniciar o MySql
  • no prompt de comando: mysql> set global max_allowed_packet = 500 * 1024 * 1024

Pronto, agora você poderá persistir arquivos de até 500MB.

FONTE: http://forums.mysql.com/read.php?35,54533,56470#msg-56470

[]'s

Rafael_Guerreiro

É… Dessa forma funcionou… Brigadão cara…

getAdicted

Valeu parceiro. Agora eu vou voltar às listas de Estatística da faculdade :smiley:

[]'s

Criado 5 de julho de 2011
Ultima resposta 5 de jul. de 2011
Respostas 13
Participantes 2