2015-12-24 5 views
6

Ich lerne, wie man mit Spring Boot JPA auf Datenbanken zugreift.Wie Joda Time (alle) in Spring JPA mit einigen SQL-kompatiblen Spalte Typ speichern?

Ich schrieb eine Anwendung mit einigen Unternehmen, mit Instant Feld:

ich kompiliert mit @Temporal oder @Type Anmerkungen konnte nicht/laufen, so dass sie als Kommentar gekennzeichnet.

Auch konnte ich nicht mit der Einstellung von spring.jpa.properties.jadira.usertype.autoRegisterUserTypes in application.properties

ausgeführt wurde verursacht einen Fehler

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; 

Also, diese Linie auch geführt wird kommentiert.

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 

Leider im Endzustand bekam ich einige serialisiert/Binärdaten in Feldinhalt

enter image description here

Ist es möglich, einige SQL-kompatible Spalte hier eingeben zu müssen?

UPDATE

Ich fand, dass die folgende Anmerkung funktionierte gut:

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

Aber warum in application.properties Einstellung nicht funktioniert?

+1

Was meinst du damit, dass du mit der Jadira-Annotation nicht kompilieren/laufen konntest? Welche Art von Fehlern hast du bekommen? Welchen JPA-Anbieter verwenden Sie? BTW - die 'PersistentDateTime' funktioniert für Joda' DateTime', nicht 'Instant', was der Typ deines Feldes ist, also ist das vielleicht das Problem. –

+0

Verwenden Sie kompatible Spring Boot- und Hibernate-Versionen? Scheint wie binäre Inkompatibilität der Bibliotheken. Welche Versionen verwendest du? –

Antwort

4

Stolperte über das gleiche Problem, und es stellte sich heraus, dass die Version von Jadira usertype.core, die ich verwendete (5.0.0.GA) war binär inkompatibel mit Hibernate 4.x SPI.

Der Wechsel zu 4.0.0.GA hat den Trick gemacht und die Registrierung der Jadira-Typen mit jadira.usertype.autoRegisterUserTypes=true hat begonnen zu arbeiten.