LocalDateTime сопоставляется с Oracle DATE, но не с H2 DATE - PullRequest
0 голосов
/ 23 октября 2018

Допустим, у меня есть JPA @Embeddable:

@Embeddable
public class SpecificationValidity {    
    @Column(name = "VALID_FROM", nullable = false)
    private final LocalDateTime validFrom;

    @Column(name = "VALID_TO")
    private final LocalDateTime validTo;
}   

Таблица SQL содержит столбцы VALID_FROM и VALID_TO и объявлена ​​с использованием ревизии жидкой базы следующим образом:

<column name="VALID_FROM" type="date">
    <constraints nullable="false"/>
</column>
<column name="VALID_TO" type="date"/>

Когда я запускаю этот код для базы данных Oracle, все работает.

Когда я запускаю его для базы данных H2, Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [valid_from] in table [specification]; found [date (Types#DATE)], but expecting [timestamp (Types#TIMESTAMP)]

Почему это так?

Возможно ли иметьсогласованное отображение для обеих баз данных?

1 Ответ

0 голосов
/ 23 октября 2018

Я предполагаю, что вы используете Hibernate (из сообщения об исключении).Поскольку вы используете Java 8 или выше, вам может потребоваться добавить это в вашу зависимость для hibernate 5.0.x .

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-java8 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.3.7.Final</version>
</dependency>

. Это помогает конвертировать туда и обратно из типов Java 8JPA известных типов.В этом случае это позволяет LocalDateTime LocalDate и Instant и т. Д.,

Я выставляю отображаемое сопоставление (также упомянутое в статье).

Java8 type to jdbc type mapping

Справочная статья: Hibernate + java 8 datetime

PS: для Hibernate 5.2x и выше эта явная зависимость не требуется.http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#basic-datetime

...