Neither JPA nor Hibernate currently support the new date/time classes brought by JSR-310 in JDK8 (JPA ticket, Hibernate ticket). Nonetheless, I'd like to code with the JDK8 date/time classes as they are finally well designed. In particular, I'm interested in java.time.Instant
, not in full support for all java.time.*
types, as all my entities will use this particular class (or so I think now, at least :-)
One option is to write a type converter, as defined by JPA 2.1. However, our app server is JBoss EAP 6.3 which is JPA 2.0 but not 2.1 compatible, so this is out of the question for now.
The next option is to use a Hibernate user type (a blog post about converting other JSR-310 classes here).
Are there better options? Thanks.
See the ThreeTen home page, where three different JPA libraries are mentioned:
Either use Hibernate 5.2.0+ or for earlier Hibernate 5 add the following dependency:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>${hibernate.version}</version>
</dependency>
In Hibernate 5.2 onwards has this issue solved more fully - you no longer need to include the hibernate-java8
dependency from Ipandzic's comment and you can use java.time.*
classes such as LocalDateTime
or Instant without any additional steps. You also do not need to mark columns using java.util.LocalDateTime
etc as Temporal
anymore, the way you had to with the older java.util.Date
approach.
Since Hibernate 5.2, the hibernate-java8
content has been merged into hibernate-core
see the change notes here
来源:https://stackoverflow.com/questions/26447464/persist-java-time-instant-jdk8-with-jpa2-hibernate