постоянный тип отметки времени только дата без времени - PullRequest
3 голосов
/ 20 октября 2011

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

@Column(name = "CDATE")
@Temporal(TemporalType.DATE)
Calendar cDate; // or Date cDate

, но если я хочу использовать тип данных Timestamp, временная аннотация не имеет типа отметки времени:

@Column(name = "CDATE")
@Temporal(TemporalType.DATE)
Timestamp cDate;

Я знаю,использование типа даты Timestamp не является предпочтительным, но мне это нужно в соответствии с моей архитектурой.И я не хочу каждый раз устанавливать нулевые значения в минутах, часах и других единицах в моей cDate.Есть ли способ решить это.PS Я использую открытую базу данных JPA и Oracle.

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

В Oracle 10 у вас есть только тип столбца DATE, вы определяете тип, либо дату, либо отметку времени, устанавливая размер в аннотации для столбца в вашем классе сущностей

        @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "START_DT", table="PART_DETL", nullable = false, length = 13)
    public Date getTbl1StartDt() {
        return this.tbl1StartDt;
    }

И для свидания, используйте это ...

        @Temporal(TemporalType.DATE)
    @Column(name = "START_DT", table="PART_DETL"/*, nullable = false, length = 13*/)
    public Date getTbl1StartDt() {
        return this.tbl1StartDt;
    }
    public void setTbl1StartDt(Date tbl1StartDt) {
        this.tbl1StartDt = tbl1StartDt;
    }
0 голосов
/ 20 октября 2011

Если вы хотите сохранить метку времени без компонента времени (я предполагаю, что вы просто хотите, чтобы время было 00:00:00), вам нужно установить время на ноль.

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

private Date stripTimeFromDate(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);

    calendar.set(Calendar.HOUR_OF_DAY, 0);  
    calendar.set(Calendar.MINUTE, 0);  
    calendar.set(Calendar.SECOND, 0);  
    calendar.set(Calendar.MILLISECOND, 0);

    return calendar.getTime();
}

Я использую это для удаления параметров для запроса, чтобы убедиться, что параметры from и to для оператора Между не содержат элемент времени.

В JPA нет аннотации, которая делает то, что выхочу, насколько я знаю.Если вы установите значение без временных компонентов в вашей сущности, которые будут сохраняться, я думаю, вы будете в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...