Spring Boot - Hibernate - 从SQL查询导入日期

时间:2017-12-01 14:17:10

标签: sql hibernate spring-data hibernate-mapping spring-jdbc

我目前正在使用Spring Data(和Boot)构建REST API。 我有一个来自h2数据库的sql Dumb,可以通过hibernate访问。

我的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时,我遇到以下异常: enter image description here

  

引起:org.h2.jdbc.JdbcSQLException:函数“TO_DATE”:无效   日期格式:“试图解析其中一个'[7月,2月,4月,6月,8月,麦,   Nov,Jan,Dez,Okt,M├ñr,Sep]'但是失败了(可能是内部的   错误?)。细节:       TO_DATE('16 -MAR-17','DD-MON-RR')                   ^,^< - 此时解析失败“; SQL语句

我的猜测是,hibernate采用了一些语言环境,其中月份是用德语配置的 - 有人知道如何改变它吗? 另一种方法是告诉hibernate - >忽略sql函数to_date(),只读字段为字符串。我尝试过在@column注释上编写@ org.hibernate.annotations.Type(type =“text”)之类的东西 - 但它不起作用:(

编辑:将导入查询中的月份名称更改为德语 - >像OCT - > OKT; DEC - > DEZ ..它有效。所以似乎Hibernate使用我的本地语言设置进行映射。有没有办法将其改为英语?

1 个答案:

答案 0 :(得分:1)

如果有其他人遇到这个问题 - 我把它搞清楚了。 Hibernate读取Locate设置。因此,在主应用程序中使用简单的代码行即可完成:

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