JPA и SQLite3 - неправильная дата - PullRequest
0 голосов
/ 17 февраля 2012

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

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

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

В базе данных это поле определено как DATETIME.

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

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

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

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

0 голосов
/ 26 октября 2014

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

0 голосов
/ 20 февраля 2012

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

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

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

...