HSQLDB + EclipseLink + генерировать DDL + DATE JODA TIME = неправильный TIMESTAMP

Я использую:

Eclipselink 2.5.0
HSQLDB 2.3
JPA 2.1
Spring 4.0.5

У меня есть эта сущность:

@Entity
public class MyEntity {

    ...

    @Temporal(TemporalType.DATE)
    @Convert(converter = MyLocalDateTimeConverter.class)
    private LocalDate date;

}

Когда HSQLDB/Eclipselink генерирует DDL, он генерирует поле dabase как:

TIMESTAMP

Когда я получаю доступ (через выбор) к этому объекту, мой преобразователь получает java.sql.Timestamp вместо java.sql.Date и преобразует значение в LocalDateTime вместо LocalDate.

Как я могу заставить генерировать поле как:

DATE // respecting the Temporal definition

person Beto Neto    schedule 03.06.2014    source источник
comment
Я нашел обходной путь, по определению @Column(columnDefinition = DATE), но мне нужно исправить это без использования SQL.   -  person Beto Neto    schedule 03.06.2014


Ответы (1)


Причина, по которой вы получаете java.sql.TimeStamp, очень проста: у вас есть не только year, month и day в БД, но также, возможно, hour, minute и second.

Единственная разница между java.sql.Date и java.sql.Timestamp заключается в том, что Timestamp содержит больше информации, например hour,..

..., а это значит, что для вас правильно получить java.sql.Timestamp.

PS: java.sql.Date и java.sql.Timestamp являются оболочкой java.util.Date..

person Jaiwo99    schedule 03.06.2014
comment
Я знаю разницу между Timestamp и Date, дело в том, что я хочу/должен использовать тип Date (только год, месяц, день) в базе данных, и мне нужно сгенерировать DDL с DATE, а не с TIMESTAMP. - person Beto Neto; 03.06.2014