2012-02-16 2 views
0

Поле даты в моем классе сущностей определяется следующим образом:JPA и SQLite3 - неверная дата

@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "LAST_EXECUTED") 
private Date lastExecuted = new Date(); 

Однако, когда она сохраняется в базе данных SQLite3 через JPA, значение базы данных всегда «1899-12 -30' . У вас есть идеи, почему?

В базе данных задано DATETIME.

Я пробовал использовать как SqliteJDBC, так и Xerial SQLite JDBC.

Update: После включения отладки SQL в EclipseLink JPA, и отключив параметр привязки, похоже даты вставляются следующим образом:

insert into run (last_executed) values ('{ts ''2012-02-17 10:34:58.013''}'); 

, который, если вставлен вручную в SQLite, дает дата '1899-12-30'.

Конечно, любые обходные пути были бы весьма полезными.

+0

Очевидно, что вы используете конкретную реализацию JPA, и каждая реализация JPA даст разные результаты. Следовательно, фактически упоминание о том, какая реализация JPA будет полезной ;-) – DataNucleus

+0

Прошу прощения; это EclipseLink JPA. – Dario

+0

Не может помочь вам, так как DataNucleus JPA делает INSERT как «ВСТАВИТЬ В A (LAST_EXECUTED) VALUES ('2012-02-17 13: 41: 09.453')» и после извлечения имеет все данные, которые он имел при сохранении – DataNucleus

ответ

1

Дата выглядит правильно во вставке, поэтому, похоже, это проблема SQLite. Обычно вы должны использовать привязку параметров, кажется, что SQLite разрешает привязку Timestamp или игнорирует часть DATE. Что делать, если вы используете TemporalType.DATE?

Возможно, попробуйте использовать raw JDBC, чтобы точно узнать, что такое драйверы JDBC?

Для распечатанного синтаксиса, если не используется привязка параметров, вы можете настроить его, создав свой собственный подкласс DatabasePlatform. Синтаксис, который вы напечатали, является стандартным синтаксисом временной метки JDBC.

0

Вы можете проверить, что это java.util.Date, а не java.sql.Date?

@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "LAST_EXECUTED") 
private java.util.Date lastExecuted = new Date(); 

Как выглядит вывод отладки, если вы снова включите привязку параметров?

0

Использование smalldatetime решить проблему ~~~ Попробуйте.

Смежные вопросы