[resolvido] blob Hibernate.createBlob hibernate.PropertyValueException not-null property

1 resposta
romuloff

Pessoal

Estou com bastante dificuldade para salvar um byte[] em um Blob para o banco. Toda vez que salvo uma entidade cujo atributo do tipo Blob eu já setei ; dá um erro como se o atributo não houvesse sido atribuído.
2010-04-05 18:02:47 [main] DEBUG com.altec.bsbr.test.gac.dao.BlobTest {} blobImagem.length(): 5 2010-04-05 18:02:47 [main] ERROR c.a.b.app.gac.dao.impl.AbstractDAO {} org.hibernate.PropertyValueException: not-null property references a null or transient value: com.altec.bsbr.app.gac.entity.ArquivoImagemRemetida.binariosImagem
Meu código de teste reduzido é este:
public class BlobTest extends AbstractDAOTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(BlobTest.class);

    public BlobTest() {
        this.setDefaultRollback(false);
    }

    @Autowired
    private ArquivoImagemRemetidaDAO arquivoImagemRemetidaDAO;


    @Test
    public void testBlob() throws Exception {

        byte[] bufImagem = "abcde".getBytes();

        ArquivoImagemRemetida arquivoImagemRemetida = new ArquivoImagemRemetida();
        Blob blobImagem = Hibernate.createBlob(bufImagem);
        LOGGER.debug("blobImagem.toString(): " + blobImagem.toString());
        LOGGER.debug("blobImagem.length(): " + blobImagem.length());
        arquivoImagemRemetida.setBinariosImagem(blobImagem);
        arquivoImagemRemetidaDAO.incluir(arquivoImagemRemetida);
    }

}

[size=20]No meu código de teste original; bufImagem é o byte[] realmente referente à uma imagem ; porem o erro é o mesmo. Então para facilitar removí esse cenário e criei um mais simples.[/size]

[color=red]O que deve ser feito para isto funcionar ? Não tenho nenhuma suspeita[/color] :(
.

keywords: blob Hibernate.createBlob "org.hibernate.PropertyValueException:not-null property references a null"

1 Resposta

romuloff

[size=21][color=blue]PROBLEMA RESOLVIDO[/color][/size]

Depois de me estressar tentando resolver com tipo Blob; passei a utilizar Byte[] direto e resolveu. (o tipo no banco de dados ainda é Blob)

Como ficou o teste depois disso (poucas mudanças):
@Test
    public void testBlob() throws Exception {

        byte[] bufImagemPrimitive = "abcde".getBytes();
        LOGGER.debug("bufImagemPrimitive.length: " + bufImagemPrimitive.length);
        Byte[] bufImagem = ArrayUtils.toObject(bufImagemPrimitive);
        LOGGER.debug("bufImagem.length: " + bufImagem.length);

        ArquivoImagemRemetida arquivoImagemRemetida = new ArquivoImagemRemetida();
        Blob blobImagem = Hibernate.createBlob(bufImagemPrimitive);
        LOGGER.debug("blobImagem.length(): " + blobImagem.length());
        arquivoImagemRemetida.setBinariosImagem(bufImagem);
        arquivoImagemRemetidaDAO.incluir(arquivoImagemRemetida);
    }
Como ficou a parte referente à entidade:
private Byte[] binariosImagem;
    //private Blob binariosImagem;

    @Column(name = "TX_BINA", nullable = false)
    public Byte[] getBinariosImagem() {
        return this.binariosImagem;
    }

    public void setBinariosImagem(Byte[] binariosImagem) {
        this.binariosImagem = binariosImagem;
    }
    /*
    @Column(name = "TX_BINA", nullable = false)
    @Lob
    public Blob getBinariosImagem() {
        return this.binariosImagem;
    }

    public void setBinariosImagem(Blob binariosImagem) {
        this.binariosImagem = binariosImagem;
    }
    */
Criado 5 de abril de 2010
Ultima resposta 6 de abr. de 2010
Respostas 1
Participantes 1