TIMESTAMP(6) WITH TIME ZONE
次のようなタイプの列を持つテーブルにデータを入力して、DB 単体テスト用のデータをセットアップしようとしています。
<timetable START_TIME="2015-03-01 10.00.00.000000000" END_TIME="2015-03-02 10.00.00.000000000"/>
しかし、テストを実行すると、次の例外が引き続き発生します。
org.dbunit.dataset.NoSuchColumnException: TIMETABLE.START_TIME - (Non-uppercase input column: START_TIME) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.
at org.dbunit.dataset.AbstractTableMetaData.getColumnIndex(AbstractTableMetaData.java:117)
at org.dbunit.operation.AbstractOperation.getOperationMetaData(AbstractOperation.java:89)
at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:143)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
at com.github.springtestdbunit.DbUnitRunner.setupOrTeardown(DbUnitRunner.java:194)
at com.github.springtestdbunit.DbUnitRunner.beforeTestMethod(DbUnitRunner.java:66)
at com.github.springtestdbunit.DbUnitTestExecutionListener.beforeTestMethod(DbUnitTestExecutionListener.java:185)
at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:249)
タイムゾーンサフィックス +XX:XX2015-03-01 10.00.00.000000000 +00.00
を追加するなど、タイムスタンプフィールドにさまざまな形式を試しましたが、役に立ちませんでした。また、VM 引数を使用してテストを実行しようとしました-Duser.timezone=UTC
が、どちらも役に立ちませんでした。
これを達成する方法を知っている人はいますか?
編集1
コンソールに次の警告が表示されました。
2016-05-31 14:54:23 WARN SQLHelper:429 - TIMETABLE.START_TIME data type (-101, 'TIMESTAMP(6) WITH TIME ZONE') not recognized and will be ignored. See FAQ for more information.
2016-05-31 14:54:23 WARN SQLHelper:429 - TIMETABLE.END_TIME data type (-101, 'TIMESTAMP(6) WITH TIME ZONE') not recognized and will be ignored. See FAQ for more information.
したがって、Dbunit はデータ型をサポートしておらず、無視しているように見えるTIMESTAMP WITH TIME ZONE
ため、NoSuchColumnException
例外が発生します
編集2
実際、dbunit はすでにクラスTIMESTAMP
を通じてデータ型をサポートしています。OracleDataTypeFactory
構成は次のようになります。
<bean id="oracleDataTypeFactory" class="org.dbunit.ext.oracle.OracleDataTypeFactory"/>
<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
<property name="datatypeFactory" ref="oracleDataTypeFactory" />
</bean>
残念ながら、これらの設定変更後も、dbunit DatabaseConfig.datatypeFactory プロパティが DbUnitTestExecutionListener によってDefaultDataTypeFactory
TIMESTAMP データ型をサポートしないデフォルトに再設定されたため、データ型の問題は依然として存在していました。