Spring Data JPA создает столбец DATETIME, но вставляет ВРЕМЕННУЮ МЕТКУ

#java #sql #spring-data-jpa

#java #sql #spring-data-jpa

Вопрос:

У меня есть класс сущности:

 // Meeting.java
@Entity
public class Meeting {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Long id;
    
    @Column(nullable = false)
    LocalDateTime startsAt;
    ...
}

// application.properties:
spring.jpa.hibernate.ddl-auto = create

// console logs:
create table meeting (... , starts_at datetime(6) not null, ...)
...
insert into meeting (..., starts_at, ...) values(?,...)
binding parameter [2] as [TIMESTAMP] - [2020-09-05T20:37:33.226]
  

Итак, мы имеем:

  • Тип столбца базы данных datetime
  • Тип параметра привязки TIMESTAMP

Я полагаю, что это неверно.

Когда я экономлю время, 2020-09-05T20:37:33.226 это приводит к экономии 2020-09-05T16:37:33.226 (т. Е. t-time_zone вместо t ). При извлечении из базы данных время указано правильно ( 2020-09-05T20:37:33.226 ). Но мне нужно, чтобы это было правильно и в базе данных.

Когда я использую SQL-запросы (вручную записываю insert , select запросы в консоли MySQL), то 2020-09-05T20:37:33.226 сохраняется именно так, как есть.

Почему при использовании Spring Data JPA происходит вычитание time_zone? Я полагаю, что это вызвано вышеупомянутым несоответствием datetime vs TIMESTAMP , но почему происходит это несоответствие?

Кстати, я не создаю таблицы сам, это делает Spring. Что я должен изменить в коде Java, чтобы время сохранялось без преобразования часового пояса?

Комментарии:

1. С какими проблемами вы столкнулись?

2. @Rono Время начала в базе данных отличается от правильного на значение time_zone

3. При извлечении данные из базы данных отличаются от тех, которые вы храните?

4. @Rono При извлечении время указано правильно. Но мне нужно, чтобы это было правильно и в базе данных.

5. В вашей базе данных datetime хранится правильно (поскольку вы используете тип datetime). Я не думаю, что вам стоит беспокоиться об этом.