我目前正在使用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使用我的本地语言设置进行映射。有没有办法将其改为英语?
答案 0 :(得分:1)
如果有其他人遇到这个问题 - 我把它搞清楚了。 Hibernate读取Locate设置。因此,在主应用程序中使用简单的代码行即可完成:
Locale.setDefault(new Locale("en", "US"));