2017-12-01 4 views
0

Ich baue derzeit eine REST-API mit Spring Data (und Boot). Ich habe eine SQL Dumb von einer h2database, auf die durch den Ruhezustand zugegriffen wird.Spring Boot - Hibernate - Importdatum von SQL-Abfrage

Mein Application.yaml:

spring: 
    profiles: "dev" 
    datasource: 
     data: classpath:/data_api.sql 
    jpa: 
    hibernate: 
     naming: 
     physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 
     ddl-auto: create-drop 

Die SQL-Abfrage lools wie folgt aus:

Insert into TABLE (name, number, date) values ("James", 123, to_date('28-JUL-17','DD-MON-RR')) 

Information.java wie folgt aussieht:

@Entity 
@Table(name="TABLE") 
@Data 
public class Information { 

    @Column(name="name") 
    String name; 

    @Column(name="number") 
    Integer number; 

    @Column(name="date") 
    String date; 

Wenn ich versuche, die API laufen Ich habe die folgende Ausnahme: enter image description here

Verursacht durch: org.h2.jdbc.JdbcSQLException: Funktion "TO_DATE": Ungültige Datumsformat: "Versucht man von‚[Jul Feb Apr Jun Aug Mai, November Jan, zu analysieren , Dez, Okt, März, Sep] 'aber fehlgeschlagen (kann ein interner Fehler sein?). Details: TO_DATE ('16 -MAR-17' , 'DD-MON-RR') ^,^< - Parsing an dieser Stelle nicht bestanden ", SQL-Anweisung

Meine Vermutung, dass Hibernate ist etwas dauert locale, wo die Monate in Deutsch konfiguriert sind - weiß jemand, wie man das ändert? Ein anderer Weg wäre, Hibernate zu sagen -> ignoriere die sql-Funktion to_date() und lese einfach das Feld als String.Ich habe versucht, sowas wie @org zu schreiben .hibernate.annotations.Type (type = "text") über die @column Annotation - aber es funktioniert nicht :(

EDIT: Wenn der Monatname in geändert wird die Importabfragen nach Deutsch -> wie OCT -> OKT; DEC -> DEZ .. es funktioniert. Es scheint also, dass Hibernate meine lokalen Spracheinstellungen für das Mapping verwendet. Gibt es eine Möglichkeit, dies auf Englisch zu ändern?

Antwort

1

Wenn jemand anderes dieses Problem kommt - ich figuered es aus. Hibernate liest die Locate-Einstellungen. Also mit einer einfachen Code-Zeile in der Hauptanwendung geschieht dies:

Locale.setDefault(new Locale("en", "US")); 
Verwandte Themen