2011-07-14 75 views
2

的DbUnit設置:DbUnit的犯規看到Oracle列NoSuchColumnException

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? 謝謝!

+0

您是否找到適合您的解決方案?我現在有同樣的... –

回答

0

我相信你的例外是告訴你什麼是錯的:

(非大寫輸入列:PSR_LAST_UPDATED_BY)在 ColumnNameToIndexes緩存地圖。請注意,地圖的列名是 不區分大小寫。

在我看來,你的專欄是用混合大小寫創建的,在這種情況下,它需要在雙引號中引用,正如字典中的情況。不知道你如何在DBUnit中做到這一點。顯然,在某個地方有一個「地圖」,它定義了表格的列,並假定了大寫字母的列名。最好將該列重新命名爲全部大寫。

This SO question/answer說明我相信這裏發生了什麼。