Как прочитать дату SQL Server 2008 в Java с помощью JPA - PullRequest
2 голосов
/ 19 октября 2010

Мне нужно использовать java.util.Calendar для того, чтобы клиент веб-сервиса Axis2 мог отправлять / получать объекты Date. Итак, в моем объекте модели JPA я изменил все java.sql.Date на java.util.Calendar. При использовании java.util.Calendar часть веб-сервиса Axis2 работает нормально.

Я могу сохранить объект java.util.Calendar в базу данных. Проблема в том, что я не могу прочитать объект обратно из базы данных !!!

Когда я пытаюсь прочитать сохраненный объект из SQL Server 2008, я получаю эту ошибку:

An error occurred while converting the nvarchar value to JDBC data type TIMESTAMP.

В базе данных поле даты, в котором оно не может быть прочитано, имеет тип «дата». Также, если в базе данных я изменяю поле даты на тип «datetime», это работает нормально, но я использую тип «date». У кого-нибудь есть какие-либо подсказки о том, как это исправить?

1 Ответ

3 голосов
/ 19 октября 2010

Так что в моем объекте модели JPA я изменил все java.sql.Date на java.util.Calendar.

Использование java.sql.Date в объектах вашего домена не очень хорошоИдея в любом случае.

В базе данных поле даты, где оно не может быть прочитано, имеет тип "дата".Также, если в базе данных я изменяю поле даты на тип «datetime», это работает нормально, но я использую тип «date».У кого-нибудь есть какие-либо подсказки о том, как это исправить?

Возможно, ваш Calendar не аннотирован должным образом, измените его следующим образом:

@Temporal(TemporalType.DATE) 
private java.util.Calendar someDate;

Ниже приведен соответствующий раздел из спецификации JPA 1.0:

9.1.20 Временная аннотация

Временная аннотация должна быть указана для постоянных полей или свойств типа java.util.Date и java.util.Calendar.Его можно указывать только для полей или свойств этих типов.

Аннотация Temporal может использоваться вместе с примечанием Basic.

Перечисление TemporalType определяет отображениедля этих временных типов.

public enum TemporalType {
    DATE, //java.sql.Date
    TIME, //java.sql.Time
    TIMESTAMP //java.sql.Timestamp
}

...

Ссылки

  • JPA 1.0 Спецификация
    • Раздел 9.1.20 "Временная аннотация "
...