我有一个使用 Postgresql(带有 9.0-801.jdbc3 JDBC 驱动程序)的 JPA 2 应用程序(使用 Hibernate 3.6 作为 JPA 实现)。
我无法将“带有时区的时间戳”字段映射到我的 JPA 实体中。
这是一个例子:
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 )
)
我试图映射如下:
@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 */
我不断收到以下根本原因的异常:Caused by: org.hibernate.HibernateException: Wrong column type in public.backend_themetopic for column created. Found: timestamptz, expected: date
我试过的
- 替换
java.util.Calendar
为java.util.Date
- 没有区别 - using
java.sql.Timestamp
- 抱怨我无法将@Temporal
注释应用于Timestamp
org.joda.time.DateTime
与自定义@Type
注释 ( ) 一起使用@Type(type="org.joda.time.contrib.hibernate.PersistentDateTimeTZ")
也不起作用
约束
- 此应用程序与“旧系统”交互 - 因此,更改日期字段的类型不是一个好的选择
我的问题是:我应该如何将这些时区感知时间戳映射到我的 JPA 实体中?