Персистент java.time.Instant(JDK8) с JPA2/Hibernate

Ни JPA, ни Hibernate в настоящее время не поддерживают новые классы даты/времени, представленные JSR-310 в JDK8 (JPA билет, Hibernate билет). Тем не менее, я хотел бы кодировать классы даты/времени JDK8, поскольку они, наконец, хорошо разработаны. В частности, меня интересует java.time.Instant, а не полная поддержка всех типов java.time.*, поскольку все мои сущности будут использовать этот конкретный класс (или так я думаю сейчас, по крайней мере: -)

Один из вариантов заключается в написании конвертера типов , как определено JPA 2.1. Тем не менее, нашим сервером приложений является JBoss EAP 6.3, который является JPA 2.0, но не совместим с 2.1, поэтому на данный момент это не может быть и речи.

Следующая опция - использовать тип пользователя Hibernate (сообщение в блоге о преобразовании других классов JSR-310 здесь).

Есть ли лучшие варианты? Спасибо.

Ответ 1

В Hibernate 5.2 и далее эта проблема решена более полно - вам больше не нужно включать зависимость hibernate-java8 из комментария Ipandzic, и вы можете использовать классы java.time.*, такие как LocalDateTime или Instant без каких-либо дополнительных шагов. Вам также больше не нужно помечать столбцы с помощью java.util.LocalDateTime и т.д. Как Temporal, как это было с более старым подходом java.util.Date.

Начиная с Hibernate 5.2, содержимое hibernate-java8 было объединено с hibernate-core , см. примечания об изменениях здесь

Ответ 2

Использовать Hibernate 5.2.0+ или для более раннего Hibernate 5 добавить следующую зависимость:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-java8</artifactId>
        <version>${hibernate.version}</version>
    </dependency>