Saya akhirnya membuat ini "berfungsi" - dengan cara hackish - dengan mematikan validasi skema.
Sebelumnya, saya memiliki <property name="hibernate.hbm2ddl.auto" value="validate"/>"hibernate.hbm2ddl.auto"
di kegigihan saya.xml. Ketika saya mengomentari properti ini, server aplikasi saya mulai dan modelnya "berfungsi".
Bentuk akhir dari entitas saya adalah:
@Entity
@Table(schema = "content", name = "theme")
public class Theme extends AbstractBaseEntity {
private static final long serialVersionUID = 1L;
@Column(name = "run_from", columnDefinition = "timestamp with time zone not null")
@NotNull
@Temporal(TemporalType.TIMESTAMP)
private Date runFrom;
@Column(name = "run_to", columnDefinition = "timestampt with time zone not null")
@NotNull
@Temporal(TemporalType.TIMESTAMP)
private Date runTo;
/* Getters, setters, .hashCode(), .equals() etc omitted */
Setelah membaca sedikit tentang ini, saya mendapat kesan bahwa tidak ada cara mudah untuk memetakan cap waktu Postgresql dengan kolom zona waktu.
Beberapa implementasi JPA + kombinasi basis data mendukung ini secara asli (EclipseLink + Oracle adalah salah satu contohnya). Untuk hibernasi, dengan ekstensi jodatime, dimungkinkan untuk menyimpan stempel waktu yang sadar zona waktu menggunakan stempel waktu normal + bidang varchar untuk zona waktu (saya tidak dapat melakukannya karena saya dibatasi untuk mengubah skema basis data). Jenis pengguna Jadira atau tipe pengguna khusus juga dapat digunakan untuk mengatasi masalah ini.
Saya perlu mencatat bahwa kasus penggunaan saya untuk entitas ini adalah "hanya baca", jadi saya bisa lolos dengan "solusi" yang tampaknya naif.