8

Oracle 11GR2 で最新バージョンの DBUnit (2.4.7) を使用しています。Java 6 (1.6.0_15) と最新バージョンの Oracle のクライアント jar (jdbc6.jar) を使用しています。

CLOB Oracle フィールドによって参照されるデータを、XML ファイルからデータベースに正常にロードできませんでした。

私は、次のバージョンのあらゆる種類の組み合わせを使用しました。

  • Oracle JDBC ライブラリ ojdbc5.jar、ojdbc6.jar、oracle 10 jar
  • Hibernate ライブラリなど... 問題は DBUnit にあると思います。スタック トレースについては、以下を参照してください。

    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.5.0-CR-2</version>
    

    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.4.0.GA</version>
    

Java 6、1.6.0_15 を実行しています。

私はもう試した:

1) この定義を使用した FlatXmlDataSet

<MESSAGE msg_id="1" mtp_id="1" msg_detail="asadds" />

2) この定義を使用した XmlDataSet

<table name="MESSAGE">
    <column>MSG_ID</column>
    <column>MTP_ID</column>
    <column>MSG_DETAIL</column>
    <row>
        <value>1</value>
        <value>1</value>
        <value>dsad</value>
    </row>
</table>

どんな助けでも大歓迎です!

スタック トレースは次のとおりです。

        org.apache.maven.surefire.booter.SurefireBooter.main (SurefireBooter.java:980) で
エラー [10032010 14:15:13,031] - EntityManager の作成中に例外が発生しました: [] (MessageDAOTest.java:97)
java.lang.RuntimeException: JpaDBTestCase の例外
        com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFiles (JpaDBTestCase.java:97) で
        com.ert.ertmon.dao.ejb.impl.MessageDAOTest.setUpBeforeClass (MessageDAOTest.java:94) で
        sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
        java.lang.reflect.Method.invoke(Method.java:597) で
        org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) で
        org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:15) で
        org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:41) で
        org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:27) で
        org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:31) で
        org.junit.runners.ParentRunner.run(ParentRunner.java:236) で
        org.apache.maven.surefire.junit4.JUnit4TestSet.execute (JUnit4TestSet.java:62) で
        org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet (AbstractDirectoryTestSuite.java:140) で
        org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute (AbstractDirectoryTestSuite.java:127) で
        org.apache.maven.surefire.Surefire.run (Surefire.java:177) で
        sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
        java.lang.reflect.Method.invoke(Method.java:597) で
        org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess (SurefireBooter.java:334) で
        org.apache.maven.surefire.booter.SurefireBooter.main (SurefireBooter.java:980) で
原因: java.lang.ClassCastException: java.lang.Stringをoracle.sql.CLOBにキャストできません
        oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical (OraclePreparedStatement.java:7898) で
        oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7511)で
        oracle.jdbc.driver.OraclePreparedStatement.setObject (OraclePreparedStatement.java:7984) で
        oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject (OraclePreparedStatementWrapper.java:237) で
        org.dbunit.dataset.datatype.ClobDataType.setSqlValue(ClobDataType.java:71) で
        org.dbunit.database.statement.SimplePreparedStatement.addValue (SimplePreparedStatement.java:73) で
        org.dbunit.database.statement.AutomaticPreparedBatchStatement.addValue (AutomaticPreparedBatchStatement.java:63) で
        org.dbunit.operation.AbstractBatchOperation.execute (AbstractBatchOperation.java:186) で
        org.dbunit.AbstractDatabaseTester.executeOperation (AbstractDatabaseTester.java:190) で
        org.dbunit.AbstractDatabaseTester.onSetup (AbstractDatabaseTester.java:103) で
        com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFile (JpaDBTestCase.java:136) で
        com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFiles (JpaDBTestCase.java:92) で
        ... 21以上
4

3 に答える 3

4

org.dbunit.ext.oracle.Oracle10DataTypeFactory を使用します

データファクトリー設定で。

于 2012-09-02T08:59:19.750 に答える
3

これはバグID1984596のようで、ステータスがよくわかりません(クローズされていますが、問題が修正されているかどうかわかりません)。問題で提案されているように、DbUnit 2.2.1を試してみてください(バージョン2.2.2で導入された変更が問題の原因になっているようです)。これが機能する場合は、間違いなく問題を再開する必要があります。

于 2010-03-10T22:49:33.380 に答える
2

先日、AntとDBUnitを使用してこの問題に遭遇しました。Antバージョン1.7.1、DBUnit 2.4.5。、およびOracle10gを使用しています。私が見つけた「回避策」は、Antタスクでデータベースダイアレクトを指定することでした。

<dbunit driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin@127.0.0.1:1521:MyOracleDb" userid="[userid]" password="[password]" schema="[MySchema]">
    <dbconfig>
       <property name="datatypeFactory" value="org.dbunit.ext.oracle.OracleDataTypeFactory"/>
    </dbconfig>
    <operation type="CLEAN_INSERT" src="MY_DATA.xml" />
</dbunit>

dbconfigプロパティを追加すると、文字列/CLOBキャストの問題はなくなりました。これがAntでこのエラーを見た人に役立つことを願っています。

于 2010-10-29T12:51:38.317 に答える