Как сохранить метку времени в базе данных h2

4

У меня есть простой 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, и этот стандартный формат должен поддерживаться. Может ли кто-нибудь указать мне, что я делаю неправильно?

  • 0
    Вы используете java.util.Date или java.sql.Date?
  • 0
    @mhasan Я использую java.util.Date
Показать ещё 1 комментарий
Теги:
hibernate
h2

1 ответ

0

ну, ответ был сделан другим способом здесь

вы найдете способ представления даты и времени с миллисекундами без часовой пояс (это то, что "метка времени" находится в SQL)

  • 0
    Этот ответ не охватывает, как хранить метки времени в формате метки времени UNIX в базе данных H2
  • 1
    вы не можете ... вы пытаетесь использовать тип Timestamp sql как представление типа данных, например, типа "long" ... почему бы не использовать непосредственно тип LONG или NUMERIC (18) в этом случае? SQL Timestamp - это НЕ то, о чем вы думаете: даже если в конце сериализации на диске база данных обязательно использует что-то вроде представления Unix, внешний интерфейс API SQL H2 сообщает TIMESTAMP = Date + Time + Milliseconds в текстовом представлении. , так что если вы действительно хотите использовать тип Timestamp SQL для представления своей отметки времени Unix, вы должны выполнить преобразование самостоятельно, без файла cookie.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню