JPA 2.0 и Oracle с TemporalType.TIME - PullRequest
       26

JPA 2.0 и Oracle с TemporalType.TIME

2 голосов
/ 20 апреля 2011

Я использую Oracle 11g и JPA 2.0 (спящий режим в JBoss 6.0.0).Мне нужно представить диапазон времени в сущности, поэтому я определил эти поля:

@Temporal(TemporalType.TIME)
private Date startTime;

@Temporal(TemporalType.TIME)
private Date endTime;

В сгенерированных таблицах используются два поля DATE, и это нормально, поскольку в Oracle нет типа, представляющего только времяpart.

При загрузке сущности из базы данных загружается только часть времени (поле содержит java.sql.Time).Вместо этого я видел, что если я установлю в полях полную дату + время, часть даты будет сохранена в БД.

Есть ли способ гарантировать, что часть даты не будет сохранена вдб

1 Ответ

2 голосов
/ 20 апреля 2011

Вы можете написать методы установки, которые удаляют компонент даты.Быстрый и грязный пример:

public void setStartTime(Date startTime)
{
    this.startTime = new Time(startTime.getTime() % 86400000L);
}

Хотя вам лучше будет использовать Joda Time для вычисления даты / времени (см. этот вопрос ).Я не проверял это, чтобы убедиться, что это правильно, но он должен показать вам основную идею:

public void setStartTime(Date startTime)
{
    this.startTime = new Time(LocalTime.fromDateFields(startTime).millisOfDay().get());
}
...