Tôi đang sử dụng phiên bản mới nhất của DBUnit (2.4.7), trên Oracle 11GR2. Tôi đang sử dụng Java 6 (1.6.0_15) và phiên bản mới nhất của jar ứng dụng khách của Oracle (jdbc6.jar)DBunit tạo java.lang.ClassCastException: java.lang.String không thể chuyển sang oracle.sql.CLOB khi cố gắng tải trường CLOB
Tôi đã không thể tải thành công bất kỳ dữ liệu nào được tham chiếu bởi một trường CLOB Oracle từ một tệp XML vào cơ sở dữ liệu.
Tôi đã sử dụng tất cả các loại kết hợp của phiên bản của:
- Oracle JDBC thư viện ojdbc5.jar, ojdbc6.jar, oracle 10 lọ
thư viện Hibernate vv ... Tôi nghĩ rằng vấn đề nằm trong DBUnit. Xem dưới đây để theo dõi ngăn xếp.
<groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.5.0-CR-2</version>
và
<groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.4.0.GA</version>
Tôi đang chạy Java 6, 1.6.0_15.
Tôi đã thử:
1) FlatXmlDataSet sử dụng định nghĩa này
<MESSAGE msg_id="1" mtp_id="1" msg_detail="asadds" />
2) XmlDataSet sử dụng định nghĩa này
<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>
Bất kỳ trợ giúp sẽ được nhiều đánh giá cao!
Stack trace sau:
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:980) ERROR [10032010 14:15:13,031] - exception creating EntityManager: [] (MessageDAOTest.java:97) java.lang.RuntimeException: Exception in JpaDBTestCase at com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFiles(JpaDBTestCase.java:97) at com.ert.ertmon.dao.ejb.impl.MessageDAOTest.setUpBeforeClass(MessageDAOTest.java:94) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62) at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140) at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127) at org.apache.maven.surefire.Surefire.run(Surefire.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:334) at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:980) Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to oracle.sql.CLOB at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:7898) at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7511) at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:7984) at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:237) at org.dbunit.dataset.datatype.ClobDataType.setSqlValue(ClobDataType.java:71) at org.dbunit.database.statement.SimplePreparedStatement.addValue(SimplePreparedStatement.java:73) at org.dbunit.database.statement.AutomaticPreparedBatchStatement.addValue(AutomaticPreparedBatchStatement.java:63) at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:186) at org.dbunit.AbstractDatabaseTester.executeOperation(AbstractDatabaseTester.java:190) at org.dbunit.AbstractDatabaseTester.onSetup(AbstractDatabaseTester.java:103) at com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFile(JpaDBTestCase.java:136) at com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFiles(JpaDBTestCase.java:92) ... 21 more
Wow, cảm ơn vì gợi ý, nó thực sự hiệu quả. Tôi thực sự thấy trang đó trong chuyến du lịch của tôi nhưng loại từ chối do tuổi tác và phiên bản DBunit được tham chiếu. Chỉ cần thông tin, tôi cần phải hoàn nguyên org.dbunit.ext.oracle.Oracle10DataTypeFactory về một org.dbunit.ext.oracle.OracleDataTypeFactory (và thực hiện các thay đổi khác) nhưng giờ Clobs tải thành công trong 11G.Tôi vẫn không thể tin rằng tôi là người duy nhất có hit này (CLOB tải trong Oracle 11G) Tôi sẽ cập nhật BUG ID được liệt kê ở trên ngay khi id SourceForge của tôi đến trong thư. Một lần nữa, một lời cảm ơn thực sự lớn! – Paul
được cập nhật, cho phép xem những gì xuất hiện của nó ... dường như không hoạt động nhiều trên DBUnit những ngày này không may – Paul
@Paul Cảm ơn bạn rất nhiều (vì phản hồi và nỗ lực). Và có, điều này rất đáng tiếc (tôi thích DbUnit rất nhiều cá nhân). –