Postgresql(9.0-801.jdbc3 JDBCドライバ)を使用するJPA 2アプリケーション(JPA実装としてHibernate 3.6を使用)があります。JPA 2エンティティのpostgresql "タイムスタンプ付きタイムスタンプ"のマッピング方法
「タイムゾーン付きタイムゾーン」フィールドを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.Date
とjava.util.Calendar
を交換 -java.sql.Timestamp
を使用して何の違い - をしなかった - 私もうまくいきませんでしたカスタム
@Type
注釈(@Type(type="org.joda.time.contrib.hibernate.PersistentDateTimeTZ")
)とorg.joda.time.DateTime
を使用してTimestamp
- に
@Temporal
注釈を適用することができないことを訴え
制約
- このアプリケーションは、「レガシーシステム」と対話する - そう、日付フィールドの種類を変更することが
良いオプションではありません私の質問は:私は私のJPAエンティティにこれらのタイムゾーンを意識タイムスタンプをマップする必要がありますどのように?
も、これが唯一のDDL自動または実行時に実際に便利です追加しますか? – cslotty
'columnDefinition'の値はDDLでのみ使用されます。ただし、そのDDLを使用してテーブル列を作成した場合、間接的にランタイム動作の詳細に影響を与えます。 –