Hibernate 5.3, сохраняйте java.time. * Усечение до микросекунды - PullRequest
0 голосов
/ 30 сентября 2019

Я создал приложение Spring Boot 2.x, используя Spring JPA и Hibernate 5.3. Я работаю с MySql 5.7. Поскольку столбцы DateTime в моей БД имеют точность 6 мегапикселей, я хочу обрезать дату до микросекунд в моем приложении, прежде чем значение будет сохранено в БД.

Фактически, если я этого не сделаю, когдаУ меня дата типа 2020-01-31T22:59:59.999999999Z, в MySql она сохраняется как 2020-01-31T23:00:00.000000Z и, конечно, я этого не хочу!

Я работаю с java.time.Instant в своем приложении. Я ищу аккуратный способ сделать это для всего приложения. Я конфликтую, если использовать пользовательский тип Hibernate или что-то еще. Мне бы хотелось, чтобы какой-то намек указал мне правильное направление.

1 Ответ

1 голос
/ 30 сентября 2019

truncatedTo ()

Это достаточно просто, когда вы знаете: используйте метод truncatedTo используемого вами класса datetime (возможно, Instant или OffsetDateTime). Например:

    Instant pointInTime = Instant.parse("2020-01-31T22:59:59.999999999Z");
    System.out.println("Original instant:          " + pointInTime);
    Instant truncated = pointInTime.truncatedTo(ChronoUnit.MICROS);
    System.out.println("Truncated to microseconds: " + truncated);

Вывод:

Original instant:          2020-01-31T22:59:59.999999999Z
Truncated to microseconds: 2020-01-31T22:59:59.999999Z

Однако он не работает автоматически в вашем приложении.

Ссылка: Документация Instant.truncatedTo

...