#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). Я не думаю, что вам стоит беспокоиться об этом.