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

Persistência de Dados com o Tipo LocalTime com erro

Estava fazendo testes de persistência com a nova API do Java e ocorreu que ao persistir um atributo do tipo LocalTime no Mysql esse campo recebe uma hora a mais sobre seu valor.

Por exemplo, o campo está com o valor 08:00:00 quando verifico no banco ele está com o valor 09:00:00, necessito fazer alguma configuração a mais no banco.:

Verifiquei o horário no banco com a função NOW(), e o horário está certo.

Utilizo SpringBoot, Maven e Mysql

Segue abaixo o código no GitHub https://github.com/rrhodriguez/electronic-point

3 respostas
solução!

Olá, Renato!

Muito bacanas os seus testes. Parabéns!

Seguinte... Peguei o código do seu repositório e rodei aqui. Realmente ficou uma hora a mais.

Fiz alguns testes e verifiquei que o problema é a versão do driver do MySQL.

A versão 6.0.6, que você colocou no `pom.xml, dá pau. A versão do Spring Boot, a 5.1.44, não dá pau!

No trecho do driver no seu pom.xml, deixe assim:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

Ele usará a versão do Spring Boot.

Teste e veja o que aconteceu.

Se bobear, vale entrar em contato com os desenvolvedores do driver do MySQL e abrir um BUG!

Bom dia Alexandre,

Muito obrigado pelos parabéns e mais ainda pelo apoio.

Já fiz as mudanças e conforme você descreveu acima o problema é com o driver mesmo. Assim que possível vou abrir um ocorrência referente ao BUG.

Muito obrigado mais uma vez.

Renato,

Resolvi fazer um teste aqui só com JDBC. O erro acontece mesmo assim!

Criei uma table simples:

create table teste_hora (
    hora_str varchar(8),
    hora time
);

E usei a versão 6.0.6 do driver do MySQL.

Fiz esse teste simples:

public class Teste {

    public static void main(String[] args) throws SQLException {
        LocalTime localTime = LocalTime.of(8, 45);


        String sql = " insert into teste_hora ( hora, hora_str ) values (?, ?) ";

        try(Connection c = DriverManager.getConnection("jdbc:mysql://localhost/teste", "root", "");

                PreparedStatement ps = c.prepareStatement(sql)) {
            ps.setTime(1, Time.valueOf(localTime));
            ps.setString(2, localTime.toString());
            ps.execute();
        };
    }

}

Ao fazer o select * from teste.teste_hora, obtive:

+----------+----------+
| hora_str | hora     |
+----------+----------+
| 08:45    | 09:45:00 |
+----------+----------+
1 row in set (0,00 sec)

Fazendo o downgrade para a versão 5.1.44 e rodando o mesmo teste e select, obtive:

+----------+----------+
| hora_str | hora     |
+----------+----------+
| 08:45    | 09:45:00 |
| 08:45    | 08:45:00 |
+----------+----------+
2 rows in set (0,00 sec)

Seria interessante você subir um pouco a versão até descobrir qual deu erro.

Se descobrir, poste aqui! ;)