Персистент 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>
Ответ 3
Смотрите домашнюю страницу ThreeTen, где упоминаются три библиотеки JPA: