DBUnit在H2表中解析错误时的时间戳默认值

时间:2014-11-28 14:16:31

标签: java hibernate timestamp h2 dbunit

当我尝试使用DBUnit将记录插入H2表时,我得到一个由以下原因引起的异常:

Caused by: org.h2.jdbc.JdbcSQLException: 
  Cannot parse "TIMESTAMP" constant "1970-00-01"; 
  SQL statement: insert into PUBLIC.TABLE (COLX, COLY, COLZ) values (?, ?, ?)
Caused by: java.lang.IllegalArgumentException: 
  1970-0-1 at org.h2.util.DateTimeUtils.parseDateValue(DateTimeUtils.java:276)

没有值是针对所需的时间戳列,因此dbUnit似乎尝试插入一个引发问题的默认值。 注意:1970-0-1不是表格描述中的1970-00-01(见下文)。

我不确定我可以配置行为。无论如何,她的一些设置可以帮助识别错误:

创建声明:

create table MYTABLE (
    "UUID" binary default random_uuid() not null,
    "COL2" varchar(18) not null,
    "COL3" varchar(20),
    "COL4" timestamp default '1970-00-01',
    ...

DataSet XML(如上所述,三个值不包括时间戳列)

<dataset>
  <MYTABLE COLX="text" COLY="1" COLZ="Text"/>

我也设置了

dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new H2DataTypeFactory());

我在考虑两种可能性:  1. dbUnit是否尝试解析列信息中的值?  2. dbUnit中是否有标准的默认生成器用于时间戳/日期字段?

所以我想要插入正确的默认值我需要做些什么?

1 个答案:

答案 0 :(得分:2)

没有月份0. 1月份是1月1.因此您需要使用'1970-01-01'代替'1970-00-01'