Подтвердить что ты не робот

Отсутствие @Temporal аннотации в спящем режиме

Что делать, если мы используем

@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
    return this.birthDate;
}

вместо

@Temporal(TemporalType.TIMESTAMP)
@Column(name="birth_date", nullable=false, length=19)
public Date getBirthDate() {
    return this.birthDate;
}

Есть ли побочные эффекты, если мы используем свойство столбца даты без аннотации @Temporal?

4b9b3361

Ответ 1

Только часть документации, которую мне удалось найти:

В простых API Java временная точность времени не определена. При работе с временными данными вы можете описать ожидаемую точность в базе данных. Временные данные могут иметь точность DATE, TIME или TIMESTAMP (т.е. фактическую дату, только время или оба). Используйте @Temporal аннотацию для точной настройки.

Из 2.2.2.1. Объявление основных сопоставлений свойств.

Это может указывать на то, что фактическое представление даты в базе данных не определено и, конечно, лучше указать его напрямую.

Ответ 2

Я понимаю, что этот вопрос уже был дан, но мы боролись с этим сегодня, поэтому я хотел дать более глубокое представление о будущих людях, которые спотыкаются об этом.

Используя Oracle 11g с драйверами версии 11, если вы не используете временную аннотацию, тогда каждый тип данных даты, времени и времени из Oracle будет сопоставляться с меткой времени в вашем коде во время выполнения. Функционально это прекрасно, однако это вызвало серьезные проблемы с производительностью. Это было связано с тем, что у нас был тип DATE как составной первичный ключ. Этот столбец был ведущим столбцом индекса, а также столбцом, который мы использовали для разбиения. Когда драйвер попытается сохранить записи с этим столбцом в предложении where, Oracle будет выполнять преобразование типов данных в БД с DATE на TIMESTAMP. Это сделало индекс бесполезным, и производительность была ужасной.

Дольше, добавьте эту аннотацию всегда, чтобы вы не были готовы заплатить цену.