2014-10-19 1 views
11

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

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

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

Есть ли лучшие варианты? Благодарю.

+0

Да: использовать библиотеку, которая определяет эти типы пользователей спящего режима для вас: http://jadira.sourceforge.net/index.html –

ответ

13

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

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

Спасибо. Я пока не могу использовать Hibernate 5, но это только в бета-версии. – wishihadabettername

+0

Np, вы скоро. Он запланирован к выпуску 27 мая/2015 года, см. [Здесь] (https://hibernate.atlassian.net/projects/HHH?selectedItem=com.atlassian.jira.jira-projects-plugin:release-page) – lpandzic

+0

К сожалению, они изменили график выпуска, на данный момент доступна только версия CR1. – lpandzic

3

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

С Hibernate 5.2, hibernate-java8 содержание были объединены в hibernate-coresee the change notes here