2015-12-24 23 views
6

Sto imparando come accedere ai database con Spring Boot JPA.Come memorizzare Joda Time (any) in Spring JPA con un tipo di colonna compatibile con SQL?

ho scritto un'applicazione con qualche entità, contenente Instant campo:

ero in grado di compilare/run con @Temporal o @Type annotazioni, in modo che siano commentate.

Inoltre, ero in grado di funzionare con l'impostazione di spring.jpa.properties.jadira.usertype.autoRegisterUserTypes in application.properties

Si stava causando un errore

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.registerTypeOverride(Lorg/hibernate/usertype/UserType;[Ljava/lang/String;)Lorg/hibernate/cfg/Configuration; 

Quindi, è commentato anche questa linea.

spring.datasource.url=jdbc:h2:tcp://localhost/~/pdk 
spring.datasource.username=sa 
spring.datasource.password= 
spring.datasource.driver-class-name=org.h2.Driver 

# Jadira requirement 
#spring.jpa.properties.jadira.usertype.autoRegisterUserTypes=true 

Purtroppo, allo stato finale ho ottenuto alcuni/dati binari serializzati nel contenuto campo

enter image description here

E 'possibile avere un tipo qui un po' di colonna SQL-compatibili?

UPDATE

ho trovato, che la seguente annotazione stava lavorando bene:

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentInstantAsTimestamp") 

Ma perché l'impostazione in application.properties non funziona?

+1

Cosa vuoi dire che non sei riuscito a compilare/eseguire con l'annotazione del tipo Jadira? Che tipo di errori hai ottenuto? Quale fornitore JPA stai usando? BTW - il 'PersistentDateTime' funziona per Joda' DateTime', non 'Instant', che è il tipo del tuo campo, quindi forse questo è il problema. –

+0

Stai usando versioni Spring Boot e Hibernate compatibili? Sembra incompatibilità binaria delle librerie. Quali versioni stai usando? –

risposta

4

Si è imbattuto nello stesso problema e si è scoperto che la versione di Jadira usertype.core che stavo usando (5.0.0.GA) era binaria incompatibile con Hibernate 4.x SPI.

Passare alla 4.0.0.GA ha fatto il trucco e la registrazione dei tipi di Jadira utilizzando jadira.usertype.autoRegisterUserTypes=true ha iniziato a funzionare.