Tôi đang sử dụng Play! 1.2.4 và PostgreSQL 9.1. Tôi đã tạo một bảng có cột created_at
, thuộc loại: timestamp without time zone
. Nó có giá trị mặc định là now()
.Cách ánh xạ cột dấu thời gian thành loại JPA?
Sự cố xảy ra khi tôi tìm nạp dữ liệu bằng cách sử dụng lớp Thực thể của mình cho bảng này. Trường createdAt
luôn quay lại null
. Dưới đây là định nghĩa trường:
@Column(name="created_at", insertable=false)
public java.sql.Date createdAt;
Tất cả các trường khác được điền chính xác. Tôi đã thử thay đổi loại trường thành Date
, Calendar
, Timestamp
, v.v. và đã thử thêm chú thích @Timestamp
. Nhưng không có sự kết hợp nào đã thành công.
Cảm ơn bạn đã giúp đỡ!
Để tham khảo, dưới đây là DDL tôi đã sử dụng để tạo bảng.
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)
);
Cập nhật: Tôi nghĩ rằng vấn đề đã làm với sử dụng JPA để chèn một kỷ lục. Cơ sở dữ liệu điền một giá trị mặc định là now()
cho created_at
, nhưng bằng cách nào đó Hibernate không biết về nó khi tìm nạp hàng đó.
Nếu tôi truy vấn một hàng đã tồn tại, trường createdAt
được điền chính xác! OK ... điều này làm giảm vấn đề.
Tôi đã thử, nhưng không được. Trường này vẫn đang trở lại null từ cơ sở dữ liệu. – slattery
Hãy thử điều này sau đó '@Column (name =" create_at ", insertable = false, nullable = false)' –
Truy vấn của bạn như thế nào? hoặc thử điều này: '@Column (name =" create_at ", insertable = false, columnDefinition =" now() ")' –