У меня есть приложение JPA 2 (с Hibernate 3.6 в качестве реализации JPA), которое использует Postgresql (с драйвером JDBC 9.0-801.jdbc3).
У меня возникли проблемы с отображением полей "timestamp with time zone" в мои объекты 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
- не имеет значения - с помощью
java.sql.Timestamp
- жаловался, что я не могу применить аннотацию@Temporal
кTimestamp
- с помощью
org.joda.time.DateTime
с пользовательской аннотацией@Type
(@Type(type="org.joda.time.contrib.hibernate.PersistentDateTimeTZ")
) также не работал
Ограничения
- Это приложение взаимодействует с "устаревшей системой" - поэтому изменение типов полей даты не является хорошим вариантом.
Мой вопрос: как мне сопоставить эти временные метки, относящиеся к временному диапазону, в мои объекты JPA?