Ошибка проверки схемы гибернации для LocalDate - найдена дата, но ожидается отметка времени - PullRequest
0 голосов
/ 17 марта 2020

Я недавно пытался развернуть приложение из 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") как предложено здесь решает проблему, но мой вопрос:

  1. Обязательно ли нужно принудительно добавлять columnDefinition в таких случаях?
  2. Приложение хорошо работает в JBoss 7.0 . Как я могу узнать, какие изменения, внесенные в JBoss 7.2.4 , которые нарушают работу моего приложения?
  3. Любые другие рекомендации по решению этой проблемы.

Это проблема с H2 при соединении с Oracle такой проблемы нет.

1 Ответ

1 голос
/ 17 марта 2020

Обновлено

Похоже, вы столкнулись с несовместимостью Hibernate с драйвером H2 при работе с DATE в Oracle MODE. См .: https://github.com/h2database/h2database/issues/1824

Кроме того, JBoss 7.2 теперь поддерживает JPA 2.2 (см .: https://access.redhat.com/articles/113373). В JPA 2.2 добавлена ​​поддержка временных классов Java8, таких как LocalDate, поэтому вы можете удалить свой конвертер.

JPA 2.2 использует JDB C 4.2. Вот сопоставления объектов в JDB C.

См. Таблицу B-4 для JDB C 4.2 spe c:

Table B-4 on JDBC 4.2 spec

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