У меня есть простой REST Api, отображающий несколько объектов, некоторые из которых имеют поле даты, которое я хотел бы сохранить в базе данных H2 в формате временной метки UNIX. Однако это приводит к следующим исключениям:
Caused by: org.h2.jdbc.JdbcSQLException: Cannot parse "TIMESTAMP" constant "335923000"; SQL statement:
INSERT INTO people (person_id, first_name, last_name, email, gender, location, date_birth) VALUES
('1', 'Peter', 'Smith', '[email protected]', 'MALE', 'London', 335923000),
...
Раньше он работал с меткой времени в следующем формате: '1980-04-08'
.
Это определение таблицы SQL:
CREATE TABLE people (
person_id BIGINT PRIMARY KEY auto_increment,
first_name VARCHAR(32),
last_name VARCHAR(32),
email VARCHAR(128) UNIQUE,
gender VARCHAR(8),
location VARCHAR(32),
date_birth TIMESTAMP,
);
и мой объект сопоставления (ненужные данные опущены):
@Entity
@Table(name = "people")
@Getter
@Setter
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "person_id")
private long id;
...
@Column(name = "date_birth")
@JsonFormat(pattern = "YYYY-MM-dd")
private Date dateOfBirth;
...
}
Я предполагаю, что аннотация @JsonFormat
не имеет никакого отношения к формату timestamp базы данных, но я не уверен, как сообщить hibernate, что моя временная метка находится в формате UNIX.
Я посмотрел на временную метку unix на временную метку H2 и документы H2, и этот стандартный формат должен поддерживаться. Может ли кто-нибудь указать мне, что я делаю неправильно?
ну, ответ был сделан другим способом здесь
вы найдете способ представления даты и времени с миллисекундами без часовой пояс (это то, что "метка времени" находится в SQL)