DbUnit没有看到Oracle列NoSuchColumnException

时间:2011-07-14 11:25:59

标签: java oracle dbunit

DbUnit设置:

DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, true);
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new org.dbunit.ext.oracle.OracleDataTypeFactory());

代码:

@Test
    @DataSet(value="ReportTest.testPropagationToChild.xml", loadStrategy=RefreshLoadStrategy.class)
    public void testPropagationToChild() {

数据集:

<dataset>
    <REPORT ID="-1" NODE_NAME="TG1" NODE_LEVEL="2" PARENT_ID="0" RENA_STATUS="1" PSR_STATUS="1" PSR_AMOUNT="200" RENA_AMOUNT="1000" PSR_LAST_UPDATED_BY="u11" RENA_LAST_UPDATED_BY="u2"/>

表:

 ID     PARENT_ID   NODE_NAME     NODE_LEVEL     RENA_STATUS     RENA_LAST_UPDATED     RENA_LAST_UPDATED_BY     RENA_AMOUNT           PSR_STATUS     PSR_LAST_UPDATED     PSR_LAST_UPDATED_BY     PSR_AMOUNT     RENA_COMMENT     ADDITIONAL_COMMENT

例外:

Caused by: org.dbunit.dataset.NoSuchColumnException: REPORT.PSR_LAST_UPDATED_BY -  (Non-uppercase input column: PSR_LAST_UPDATED_BY) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive. 

其他列(如ID等)可以导入。我正在使用Oracle 11g,dbunit 2.4.8

为什么导入PSR_LAST_UPDATED_BY失败? 谢谢!

1 个答案:

答案 0 :(得分:0)

我相信你的异常告诉你错误:

  

(非大写输入栏:PSR_LAST_UPDATED_BY)in   ColumnNameToIndexes缓存映射。请注意,地图的列名称是   不区分大小写。

在我看来,您的列是使用混合大小写创建的,在这种情况下,需要在双引号中引用它,完全是字典中的情况。不确定你是如何在DBUnit中那样做的。显然,某个地方有一个“map”来定义表的列,并假定大写的列名。最好将列重命名为全部大写。

This SO question/answer说明了我认为在这里发生的事情。