Wie speichern Zeitstempel in der h2-Datenbank
Habe ich eine einfache REST-Api freilegen von mehreren Einrichtungen, von denen einige, hat date Feld, die ich gerne speichern in einer H2-Datenbank im UNIX-timestamp-format. Dies ist jedoch verursachen die followign Ausnahmen:
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),
...
Zuvor arbeitete Sie mit Zeitstempel im folgenden format: '1980-04-08'
.
Dies ist der SQL-Tabelle definition:
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,
);
und meine mapping-Objekt (unnötige details weggelassen):
@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;
...
}
Ich gehe davon aus das die @JsonFormat
Anmerkung hat nichts zu tun mit der Datenbank timestamp-format, aber ich bin nicht sicher, wie zu sagen, hibernate, dass meine Zeitstempel im UNIX-format.
Ich habe mir bei konvertiert unix timestamp zu timestamp H2 und H2 docs und das standard-format sollte unterstützt werden. Könnte mir jemand zeigen Sie mir, was mache ich falsch?
Ich bin mit java.util.Datum
Haben Sie versucht, mit
DATE
statt TIMESTAMP
, wie Ihre Spalte name hin, es ist nur ein Datum, nicht eine timestamp?InformationsquelleAutor Smajl | 2016-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
gut, die Antwort hätte anderen Weise hier
finden Sie eine Möglichkeit dar, eine Zeit mit Millisekunden (ohne Zeitzone (das ist das, was ist "timestamp" in SQL)
Sie können nicht... Sie versuchen, verwenden Sie den sql-Typ Timestamp als Repräsentation eines Datentyps irgendwie wie eine "lange"... warum nicht direkt mit einem LANG-oder NUMERIC(18) in diesem Fall ? SQL-Timestamp ist NICHT, was Sie denken, es ist : auch wenn am Ende der Serialisierung auf der Festplatte die Datenbank sicherlich so etwas wie unix-Darstellung, die vor Ende der H2-SQL-API sagt TIMESTAMP = Datum+Zeit+Millisekunden in eine text-Darstellung. also, wenn Sie wirklich wollen, verwenden Sie SQL-Typ Timestamp, um Sie zu vertreten Unix-timestamp, haben Sie, um die Konvertierung von selbst, kein cookie.
Ok, habe ich beschlossen, ich werde es speichern int die standard-text-format und ich bin versucht, speichern Sie es wie folgt aus: "2016-12-01 20:00'. Jedoch, dies führt zu exception: Cannot parse "TIMESTAMP" Konstante "2016-12-01 20:00 Uhr". Ich bin mit DATETIME-Datentyp.
InformationsquelleAutor Alex