【发布时间】:2014-11-28 14:16:30
【问题描述】:
当我尝试使用 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 中是否有标准的默认时间戳/日期字段生成器?
那么我需要做什么才能插入正确的默认值?
【问题讨论】:
标签: java hibernate timestamp h2 dbunit