Tôi có một ứng dụng JPA 2 (với Hibernate 3.6 là triển khai JPA) sử dụng Postgresql (với trình điều khiển JDBC 9.0-801.jdbc3).Cách ánh xạ postgresql "dấu thời gian với múi giờ" trong thực thể JPA 2
Tôi gặp sự cố khi ánh xạ các trường "dấu thời gian với múi giờ" vào các thực thể JPA của tôi.
Dưới đây là một ví dụ:
CREATE TABLE theme
(
id serial NOT NULL,
# Fields that are not material to the question have been edited out
run_from timestamp with time zone NOT NULL,
run_to timestamp with time zone NOT NULL,
CONSTRAINT theme_pkey PRIMARY KEY (id),
CONSTRAINT theme_name_key UNIQUE (name)
)
Tôi đã cố gắng để ánh xạ như sau:
@Entity
@Table(schema = "content", name = "theme")
public class Theme extends AbstractBaseEntity {
private static final long serialVersionUID = 1L;
@Column(name = "run_from")
@NotNull
@Temporal(TemporalType.TIMESTAMP)
private Date runFrom;
@Column(name = "run_to")
@NotNull
@Temporal(TemporalType.TIMESTAMP)
private Date runTo;
/* The rest of the entity has been edited out */
tôi tiếp tục nhận được một ngoại lệ với nguyên nhân gốc rễ sau: Caused by: org.hibernate.HibernateException: Wrong column type in public.backend_themetopic for column created. Found: timestamptz, expected: date
gì Tôi đã thử
- thay thế
java.util.Calendar
vớijava.util.Date
- đã có sự khác biệt - sử dụng
java.sql.Timestamp
- phàn nàn rằng tôi không thể áp dụng các@Temporal
chú thích để mộtTimestamp
- sử dụng
org.joda.time.DateTime
với một tuỳ chỉnh@Type
chú thích (@Type(type="org.joda.time.contrib.hibernate.PersistentDateTimeTZ")
) cũng đã không làm việc
Ràng buộc
- Ứng dụng này tương tác với một "hệ thống di sản" - vì vậy, thay đổi các loại các trường ngày không phải là một lựa chọn tốt
Câu hỏi của tôi là: làm thế nào tôi nên bản đồ các múi giờ timestamps biết thành thực thể JPA của tôi?
Đây có phải là thực sự hữu ích chỉ dành cho ô tô DDL hoặc trong thời gian chạy, quá? – cslotty
Giá trị 'columnDefinition' chỉ được sử dụng trong DDL. Tuy nhiên, nếu cột bảng của bạn được tạo ra với DDL đó, nó sẽ gián tiếp ảnh hưởng đến các chi tiết cụ thể của hành vi thời gian chạy. –