Oracle + dbunit gets AmbiguousTableNameException Oracle + dbunit gets AmbiguousTableNameException sql sql

Oracle + dbunit gets AmbiguousTableNameException


From the docs:

public class AmbiguousTableNameException extends DataSetException

This exception is thrown by IDataSet when multiple tables having the same name are accessible. This usually occurs when the database connection have access to multiple schemas containing identical table names.

Possible solutions:

1) Use a database connection credential that has access to only one database schema.

2) Specify a schema name to the DatabaseConnection or DatabaseDataSourceConnection constructor.

3) Enable the qualified table name support (see How-to documentation).


For whom uses SpringDBUnit. I had struggled with this very annoying issue. I had ended up solving the issue by adding the configuration for com.github.springtestdbunit.bean.DatabaseConfigBean and com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean.

This is my full spring context for SpringDBUnit

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close">        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />        <property name="url" value="jdbc:oracle:thin:@localhost:1521/XE" />        <property name="username" value="xxxx" />        <property name="password" value="xxxx" />    </bean>    <bean id="sessionFactory"        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">        <property name="dataSource">            <ref bean="dataSource" />        </property>        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>                <prop key="hibernate.show_sql">true</prop>            </props>        </property>        <property name="annotatedClasses">            <list>                <value>xxx.example.domain.Person</value>            </list>        </property>    </bean>    <bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">        <property name="skipOracleRecyclebinTables" value="true" />        <property name="qualifiedTableNames" value="true" />        <!-- <property name="caseSensitiveTableNames" value="true"/> -->    </bean>    <bean id="dbUnitDatabaseConnection"        class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean">        <property name="dataSource" ref="dataSource"/>        <property name="databaseConfig" ref="dbUnitDatabaseConfig" />        <property name="schema" value="<your_schema_name>"/>    </bean>


Setting the database schema fixed it for me:

@Beanpublic DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection(final DataSource dataSource){    final DatabaseDataSourceConnectionFactoryBean connectionFactory = new DatabaseDataSourceConnectionFactoryBean();    connectionFactory.setDataSource(dataSource);    connectionFactory.setSchema(DB_SCHEMA);    return connectionFactory;}