Wie um die Karte timestamp-Spalte zu JPA-Typ?
Ich bin mit Spielen! 1.2.4 und PostgreSQL 9.1. Ich habe eine Tabelle erstellt mit einer created_at
Spalte, Typ: timestamp without time zone
. Es hat einen Standardwert von now()
.
Problem, wenn ich Daten abrufen über meine Entity-Klasse für die Tabelle. Die createdAt
Feld kommt immer wieder null
. Hier ist das Feld definition:
@Column(name="created_at", insertable=false)
public java.sql.Date createdAt;
Alle anderen Felder sind ordnungsgemäß gefüllt. Ich habe versucht, die änderung der Feld-Typ zu einem Date
, Calendar
, Timestamp
usw., und habe versucht, das hinzufügen einer @Timestamp
annotation. Aber keine Kombination hat sich als erfolgreich erwiesen.
Vielen Dank im Voraus für jede Hilfe!!!
Referenz, hier ist die DDL, die ich verwendet, um die Tabelle zu erstellen.
CREATE TABLE Users
(
id serial NOT NULL,
username text NOT NULL,
email text NOT NULL,
password_hash text NOT NULL DEFAULT 0,
created_at timestamp without time zone DEFAULT now(),
CONSTRAINT Users_pkey PRIMARY KEY (id),
CONSTRAINT Users_username_key UNIQUE (username)
);
Update:
Ich denke, das problem hat zu tun mit der Verwendung von JPA auf einen Datensatz einfügen. Füllt die Datenbank einen default-Wert von now()
für created_at
, aber irgendwie Hibernate weiß nicht, über Sie beim abrufen der Zeile.
Wenn ich die Abfrage für eine Zeile, die bereits existierte, die createdAt
Feld gefüllt ist korrekt!
OK... das engt das problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich löste das problem leider nicht genau, aber ich um ihn herum gearbeitet.
Anstatt den Datenbank-Versorgung der Standard-Wert von
now()
ich drückte es in JPA mit@PrePersist
:Dass funktioniert! Inspiration genommen von diese Antwort.
Ich bin noch nicht sicher, warum der Ruhezustand nicht aktualisiert werden mit dem default-Wert, der angewendet wurde, in der Datenbank. Es ging nicht denken, war der Wert immer noch null.
Versuchen Sie dies:
@Column(name="create_at", insertable=false, nullable=false)
@Column(name="create_at", insertable=false, columnDefinition = "now()")
created_at
automatisch auf now() in die Datenbank. Aber wenn ich den Datensatz abrufen, alle Felder vorhanden sind, außer die createdAt-Feld ist null. Irgendwie ist dastimestamap
Datenbank-Wert nicht konvertiert werden.java.util.Date
oderjava.util.Calendar
. Hoffe, diese Hilfecreated_at
... ich bin mir immer noch nicht sicher, wie Sie Sie, um es zu bemerken.Müssen Sie lösen-und die fetch-Einheit der db. Insert-Anweisung nicht enthalten, created_at Feld, so dass es nicht gelang, die von JPA in die Zeit der Schöpfung. Im repository würde es so Aussehen: