databaseoracledbunit

Oracle + dbunit throws AmbiguousTableNameException


I'm using DBUnit to populate the database so that its content is a known content during testing.

The db schema I'm working on is in an Oracle 11g instance in which they reside other db schemas. In some of these schemas has been defined a table to which has been associated with a public synonym and on which have been given the rights to select.

When I run the xml that defines how the database must be populated, also if the xml file doesn't contain the table defined in several schemas, DBUnit throws the AmbiguousTableNameException exception on that table.

I found that there are 3 solutions to solve this behavior:

  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).

In my case, I can only apply the solution 1, but even if I adopt it, I got the same exception.

The table that gives me problems is defined in 3 schemas and I don't have the opportunity to act on it in any way.

Please, someone could help me?


Solution

  • I found the solution: I specified the schema in the name of the tables and I have set to true the property http://www.dbunit.org/features/qualifiedTableNames (corresponding to org.dbunit.database.FEATURE_QUALIFIED_TABLE_NAMES).

    By this way, my xml code to populate tables look like:

    <?xml version='1.0' encoding='UTF-8'?>
    <dataset>
      <SCHEMA.TABLE ID_FIELD="1" />
    </dataset>
    

    where SCHEMA is the schema name, TABLE is the table name.

    To se the property I've used the following code:

    DatabaseConfig dBConfig = dBConn.getConfig(); // dBConn is a IDatabaseConnection
    dBConfig.setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);