2016-02-19 9 views
9

Io uso Hibernate e cercare di fare quanto segue:Hibernate @Temporal per Java 8 java.time.Instant

@Temporal(TemporalType.DATE) 
@Column(name = "BIRTHDAY") 
private Instant birthday; 

ma hanno questa eccezione:

Caused by: org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property: 

come suggerito ho cercato di usare

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

ma hanno la stessa eccezione. Devo fare alcuni passaggi aggiuntivi o come risolvere un caso del genere?

risposta

21

Non è possibile utilizzare @Temporal con Java 8 tempo, se si desidera che la data con l'utilizzo a LocalDateTime, se desideri solo uso della data LocalDate senza @Temporal anotation.

un'occhiata anche http://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/

+0

Grazie, actualy ho trovato la soluzione descritta nella seconda parte dell'articolo di vostro link (con convertitore) e lo ha utilizzato - funziona benissimo! –

+2

@DmitriiAdonin, l'unica cosa di cui hai bisogno è rimuovere l'annotazione e contrassegnare il campo come una colonna di base. Funziona bene senza bisogno di alcun convertitore. Non viene direttamente dalla risposta, quindi HAYMbl4 vorresti modificare la tua risposta? –