[Resolvido]Problema para persistir campos Blob

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

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

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

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

Lembrei de uma coisa,

Você está utilizando MySql?

[]'s

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

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

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

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.

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

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

[]'s

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

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

É… Dessa forma funcionou… Brigadão cara…

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

[]'s