2016-03-22 3 views
1

Ich habe recherchiert und ich kann keine Antwort für diesen finden, obwohl es viele ähnliche Antworten gibt.Fehler beim automatischen Registrieren von Typen im Spring Boot (JPA/Joda/Jadira)

Ich habe eine Spring Boot-Anwendung (1.3.3.RELEASE), die Spring Data JPA und Joda Time verwendet; Ich benutze auch YAML für Konfigurationszwecke.

Das Problem ist: Ich kann es nicht schaffen, Benutzertypen mit Jadira automatisch zu registrieren.

mein Dies ist die relevante Stück application.yml Datei:

jackson: 
    joda-date-time-format: yyyy-MM-dd'T'HH:mm:ss.SSSZ 
    serialization: 
     write_dates_as_timestamps: false 
    jpa: 
    properties: 
     #jadira_usertype_autoRegisterUserTypes: true 
     jadira: 
     usertype: 
      autoRegisterUserTypes: true 

... und dies ist einer der JPA-Entitäten:

@Entity 
@Table(name = "POSTULATIONS") 
public final class PostulationEntity implements Serializable { 
    private static final long serialVersionUID = 608398264869292985L; 
    @Id 
    @JsonProperty("id_postulation") 
    @Column(name = "ID_POSTULATION") // columnDefinition = "BINARY(16)" 
    @GeneratedValue(generator = "uuid2") 
    @GenericGenerator(name = "uuid2", strategy = "uuid2") 
    private String id; 
    @NotNull 
    @JsonProperty("issued_at") 
    @Column(name = "ISSUED_AT", nullable = false) 
    //@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
    private DateTime issuedAt; 
    @OneToOne 
    @PrimaryKeyJoinColumn 
    private PersonEntity person; 

Ich möchte DateTime Typen verwenden können, ohne Angabe die @Type.

Ich habe mehrere Ansätze versucht, aber es funktioniert nicht so weit, wenn ich nicht die @Type Annotation auf jedem DateTime Feld setzen.

Schließlich ist dies die relevante Stück für meine Gradle Konfiguration:

dependencies { 
    compile 'com.google.guava:guava:19.0' 
    //compile 'org.jadira.usertype:usertype.core:5.0.0.GA' // TODO: ? 
    compile 'org.jadira.usertype:usertype.jodatime:2.0.1' // TODO 
    compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda' // TODO 
    } 

Vielen Dank im Voraus ...

+0

Sie Verwenden Sie Spring-Boot, so sieht es aus wie Ihr Projekt ist ziemlich neu. Wenn Sie nicht bereits daran gedacht haben, von joda-time zu java8 datetimes zu wechseln, würde ich vorschlagen, das zu prüfen. –

Antwort

0

Nach einigen Stunden, habe ich herausgefunden, Fehler-basierte Tests. Alles war fast in Ordnung, außer den Abhängigkeiten. Die ausgelösten Ausnahmen auf der Konsole waren fast nutzlos, obwohl sie durch die Änderung der Konfigurationseinstellungen (und der Abhängigkeiten) unterschiedlich waren. Daher hatte ich die Idee, verschiedene Abhängigkeiten zu versuchen, da die Daten an einigen Stellen erfolgreich importiert wurden.

Wie auch immer, die application.yml Datei bleibt, wie es ist (ich bin das Löschen der kommentierten-out Linie nur Verwirrungen zu vermeiden):

jackson: 
    joda-date-time-format: yyyy-MM-dd'T'HH:mm:ss.SSSZ 
    serialization: 
    write_dates_as_timestamps: false 
jpa: 
    properties: 
    jadira: 
     usertype: 
     autoRegisterUserTypes: true 

Alle JPA-Entitäten können nun ohne die @Type Annotation verwendet werden - zumindest für die Typen, die ich benutze.

@Entity 
@Table(name = "POSTULATIONS") 
public final class PostulationEntity implements Serializable { 
    private static final long serialVersionUID = 608398264869292985L; 
    ... 
    @NotNull 
    @JsonProperty("issued_at") 
    @Column(name = "ISSUED_AT", nullable = false) 
    private DateTime issuedAt; 

... aber Abhängigkeiten war hier der Schlüssel und der Faktor, der mein Problem verursacht wurde. Zuerst musste ich loswerden, dann die org.jadira.usertype:usertype.core BUT Version 4.0.0.GA zurück setzen/aktivieren - weil Version 5.0.0.GA nicht mit den Standardabhängigkeiten arbeitet, die mit Spring Boot 1.3.3.RELEASE kommt.Dies ist der letzte Schnipsel:

dependencies { 
    compile 'com.google.guava:guava:19.0' 
    compile 'org.jadira.usertype:usertype.core:4.0.0.GA' 
    compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda' 
} 

HINWEIS: Der Grund, warum ich nicht Versionen auf einigen anderen Abhängigkeiten verwendet, ist, weil ich den Frühling Abhängigkeiten Management Plug-in bin mit:

apply plugin: 'io.spring.dependency-management' 

dependencyManagement { 
    imports { 
    mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}") 
    } 
} 

dependencies { 
    compile 'com.google.guava:guava:19.0' 
    compile 'org.jadira.usertype:usertype.core:4.0.0.GA' // TODO 
    compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda' // TODO 
} 
Verwandte Themen