Я недавно пытался развернуть приложение из JBoss EAP 7.0 в 7.2.4 , и с тех пор я сталкиваюсь с этой проблемой при проверке схемы для полей с LocalDate
, сопоставленными с столбцы date
типов.
Точное сообщение об ошибке:
{"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"project-name.ear#MyPersistenceUnit\"" => "javax.persistence.PersistenceException: [PersistenceUnit: MyPersistenceUnit] Unable to build Hibernate SessionFactory
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: MyPersistenceUnit] Unable to build Hibernate SessionFactory
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [someDate] in table [SOME_TABLE]; found [date (Types#DATE)], but expecting [timestamp (Types#TIMESTAMP)]"}}
Фрагмент из схемы:
create table SOME_TABLE(
-- primiary key and other columns
someDate date
);
Поле в объекте:
@Convert(converter = LocalDateConverter.class)
private LocalDate someDate;
Конвертер
import java.sql.Date;
import java.time.LocalDate;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class LocalDateConverter
implements
AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate attribute) {
return attribute == null ? null : Date.valueOf(attribute);
}
@Override
public LocalDate convertToEntityAttribute(Date dbData) {
return dbData == null ? null : dbData.toLocalDate();
}
}
Я обнаружил, что добавление @Column(columnDefinition = "date")
как предложено здесь решает проблему, но мой вопрос:
- Обязательно ли нужно принудительно добавлять
columnDefinition
в таких случаях? - Приложение хорошо работает в JBoss 7.0 . Как я могу узнать, какие изменения, внесенные в JBoss 7.2.4 , которые нарушают работу моего приложения?
- Любые другие рекомендации по решению этой проблемы.
Это проблема с H2 при соединении с Oracle такой проблемы нет.