Postgresql (9.0-801.jdbc3 JDBC ドライバー) を使用する JPA 2 アプリケーション (JPA 実装として Hibernate 3.6 を使用) があります。
「タイムゾーン付きタイムスタンプ」フィールドを 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 エンティティにどのようにマッピングすればよいですか?