JPA 2.0 и Oracle с TemporalType.TIME

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

@Temporal(TemporalType.TIME)
private Date startTime;

@Temporal(TemporalType.TIME)
private Date endTime;

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

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

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


person Andrea Polci    schedule 20.04.2011    source источник


Ответы (1)


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

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());
}
person Matt Ball    schedule 20.04.2011
comment
Спасибо, я использую ваше решение (но использовал Календарь, чтобы удалить часть даты, чтобы избежать зависимости от Joda Time на данный момент). Мне интересно, есть ли способ сказать JPA, чтобы он позаботился об этой части или о чем-то подобном. - person Andrea Polci; 20.04.2011