В настоящее время я создаю REST API с данными Spring (и загрузкой). У меня есть sql Dumb из базы данных h2database, доступ к которой осуществляется через спящий режим.

Мой 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

Запрос sql выглядит так:

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

Information.java выглядит так:

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

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

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

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

Когда я пытаюсь запустить API, у меня возникает следующее исключение: введите здесь описание изображения

Вызвано: org.h2.jdbc.JdbcSQLException: Функция «TO_DATE»: Недействительный формат даты: «Пытался разобрать одно из '[июл, фев, апр, июнь, август, май, ноя, янв, декабрь, октябрь, M├ ñr, Sep] ', но не удалось (может быть, внутренняя ошибка?). Подробности: TO_DATE ('16 -MAR-17', 'DD-MON-RR') ^, ^ <- Синтаксический анализ на этом этапе завершился неудачно "; Инструкция SQL

Я предполагаю, что спящий режим требует некоторой локали, где месяцы настроены на немецком языке - кто-нибудь знает, как это изменить? Другой способ - указать hibernate -> игнорировать функцию sql to_date () и просто читать поле как строку. Я пробовал написать что-то вроде @ org.hibernate.annotations.Type (type = «text») поверх аннотации @column - но это не сработало :(

РЕДАКТИРОВАТЬ: при изменении названия месяца в запросах импорта на немецкий -> как OCT -> OKT; DEC -> DEZ .. работает. Похоже, что Hibernate использует мои локальные языковые настройки для сопоставления. Есть ли способ изменить это на английский?

0
JensH 1 Дек 2017 в 17:17

1 ответ

Лучший ответ

Если еще кто-нибудь придет к этой проблеме - я разобрался. Hibernate читает настройки Locate. Итак, с простой строкой кода в главном приложении это делается:

Locale.setDefault(new Locale("en", "US"));
2
JensH 5 Дек 2017 в 10:17