【发布时间】:2017-02-02 18:31:09
【问题描述】:
我有一个简单的 REST Api,它公开了几个实体,其中一些具有我想以 UNIX 时间戳格式存储在 H2 数据库中的日期字段。但是,这会导致以下异常:
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', 'peter@hotmail.com', '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 注释与数据库时间戳格式没有任何关系,但我不确定如何告诉 hibernate 我的时间戳是 UNIX 格式。
我查看了convert unix timestamp to H2 timestamp 和 H2 文档,应该支持这种标准格式。有人能指出我做错了什么吗?
【问题讨论】:
-
你使用的是 java.util.Date 还是 java.sql.Date?
-
@mhasan 我正在使用 java.util.Date
-
您是否尝试过使用
DATE而不是TIMESTAMP,因为您的专栏名称表明它只是一个日期,而不是时间戳?