Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

LocalDate valor BLOB

Opa, beleza? Estou tendo um problema agora com o valor Blob, quando uso uma data, do tipo da Class LocalDate no meu banco ela fica do tipo,(TINYBLOB) E o valor não sai com uma data e sim, um valor BLOB. Alguem pode me ajudar a não ficar esse valor BLOB? Eu declaro meu atributo assim.

private LocalDate dataVencimento = LocalDate.now();

Alguma anotação eu devo colocar para o JPA reconhecer? Seila...

6 respostas

Fala, Alisson!

Testei aqui e o MySQL mapeou para DATE mesmo.

Em todo caso, você pode informar ao banco de dados o tipo de dado que você quer que seja mapeado para determinado atributo através da anotação @Column.

Assim:

@Column(name = "dataVencimento", columnDefinition = "DATE")
private LocalDate dataVencimento = LocalDate.now();

Testa aí e dá um retorno.

Abraço.

Manoel ficou como DATE? Ave, como que você declarou seu atributo?

Sim, Alisson, foi criada a tabela como DATE.

Declarei do jeito que mostrei acima.

Quando você quer que um campo seja um determinado tipo, você pode passar o atributo columnDefinition para a anotação @Column. Aí ela vai dizer ao banco de dados que, para aquele atributo, deve ser criado um campo com aquele tipo de dado especificado nela. No caso abaixo, a JPA cria um campo chamado data_vencimento do tipo DATE.

@Column(name = "data_vencimento", columnDefinition = "DATE")
private LocalDate dataVencimento LocalDate.now();

Você também pode criar outros tipos específicos de determinados bancos de dados, como o numeric do MySQL. Assim:

@Column(name = "valor_de_pi", columnDefinition = "DECIMAL(10,2)")
private BigDecimal valorDePi = BigDecimal("3.14");

Tava olhando aqui a primeira resposta que te dei e vi que ficou faltando o sinal de atribuição (=). Tava assim:

@Column(name = "dataVencimento", columnDefinition = "DATE")
private LocalDate dataVencimento LocalDate.now();

Mas é assim:

@Column(name = "dataVencimento", columnDefinition = "DATE")
private LocalDate dataVencimento = LocalDate.now();

Se você só copiou e colou, não deve ter funcionado mesmo... hehe. Coloca o sinal de atribuição, testa e vê como fica...

solução!

Bom dia Alisson, você está usando Hibernate? Se for o caso, tente atualiza-lo para uma versão mais recente. Eu uso a versão 5.2.5.FINAL ou importe para o seu pom a dependência do hibernate que de suporte ao Java 8 (hibernate-java8). Com isso o hibernate já vai salvar da forma correta seus atributos que usam a nova biblioteca java.time

Manoel você tiro uma duvida que eu sempre tive kkkkk, era isso que faltava para mim poder fazer oque eu queria em uma outra situação kkk, você é foda kk, e Mario acerto em cheio, atualizei logo para 5.2.10.final que salvo do jeito que eu queria, vlw cara!!

E você podem me ajudar em outra coisa? a minha data está salvando no banco de dados com o formato americano :( tipo assim.

2017-07-14 :( como salvar a data no formato brasileiro?