org.dbunit.jeu de données.NoSuchTableException: Ne pas trouver de table 'xxx' schéma 'null'

Je sais qu'il y a eu des discussions wrt pour dbunit ici. J'ai lu la plupart d'entre eux, mais je ne peux pas l'air de trouver une solution à mon problème.

J'ai mis en place hibernate et spring. Je suis en train de faire TDD donc j'ai eu au fil d'un véritable DAO cadre de tests avant d'écrire le code. Dbunit est venu à l'esprit et je suis arrivé à la configuration des. Voici ma testdataset.xml

    <?xml version='1.0' encoding='UTF-8'?>
<dataset>
<table name="status">
<column>statusId</column>
<column>status</column>
<row>
<value>0</value>
<value>Available</value>
</row>
</table>
<table name="user">
<column>userId</column>
<column>firstName</column>
<column>lastName</column>
<column>username</column>
<column>password</column>
<column>email</column>
<row>
<value>0</value>
<value>system</value>
<value>admin</value>
<value>admin</value>
<value>admin</value>
<value>admin@ccbs.com</value>
</row>
</table>
<table name="reservation">
<column>reservationId</column>
<column>userId</column>
<column>reservationDate</column>
<column>startDate</column>
<column>endDate</column>
<column>statusId</column>
<row>
<value>0</value>
<value>0</value>
<value>2011-02-20 12:46:00.0</value>
<value>2011-03-01 12:00:00.0</value>
<value>2011-04-01 12:00:00.0</value>
<value>0</value>
</row>
</table>
</dataset>

Tout semble bien jusqu'à ce que j'essaie d'associer un code en utilisant une classe de base qui charge le jeu de données. Voici mon code:

@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-applicationContext.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class BaseContextSensitiveTest {
@BeforeClass
public static void setUpDatabase() throws Exception {
URL file = getInitalDatasetURL();
testDataset = createDataset(file);
}
@Before
public void init() throws Exception {
log.info("Initializing Data Set");
connection = createDBUnitConnection();
DatabaseOperation.CLEAN_INSERT.execute(connection, testDataset);
}
private static URL getInitalDatasetURL() throws FileNotFoundException {
URL file = ClassLoader.getSystemResource(TEST_DATASET_LOCATION);
if (file == null) {
throw new FileNotFoundException("Unable to find '"
+ TEST_DATASET_LOCATION + "' in the classpath");
}
return file;
}
private static IDataSet createDataset(URL file) throws IOException,
DataSetException {
return new XmlDataSet(file.openStream());
}
private IDatabaseConnection createDBUnitConnection()
throws DatabaseUnitException, SQLException {
Connection connection = getConnection();
IDatabaseConnection dbUnitConn = new DatabaseConnection(connection);
//use the hsql datatypefactory so that boolean properties work
//correctly
DatabaseConfig config = dbUnitConn.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
new HsqldbDataTypeFactory());
return dbUnitConn;
}

Dès qu'elle touche le DatabaseOperation.CLEAN_INSERT.execute(connection, testDataset); il jette l'exception suivante:

org.dbunit.dataset.NoSuchTableException: Did not find table 'USER' in schema 'null'
at org.dbunit.database.DatabaseTableMetaData.<init>(DatabaseTableMetaData.java:142)
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:290)
at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
at com.cottage.test.BaseContextSensitiveTest.init(BaseContextSensitiveTest.java:64)

J'ai tous les fichiers de mapping hibernate en place et la base de données est déjà en place avec pas de données. Drôle de chose (ou ennuyeux en fonction de la façon dont vous le regardez), c'est que si je change l'ordre des tables dans le jeu de données, la missingtableexception se plaint d'une autre table... soit par l'utilisateur, de réservation ou d'état.

Toutes les suggestions sur ce que je fais de mal?

Qu'advient-il si vous pré-pend le nom de schéma pour le nom de la table d'état --> monschema.statut ?
Fiandesio, entendez-vous lors de la création de IDatabaseConnection dbUnitConn = new DatabaseConnection(connexion, "SCHÉMA?NAME")?
Non, je veux dire dans le dataset xml fichier <table name="statut"> devient <table name="monschema.le statut de">
Comment est-ce que votre chaîne de connexion JDBC?
Fiandesio: j'ai essayé, mais obtenir la même erreur. seulement avec le nom de schéma ajouté à la "table manquante".

OriginalL'auteur | 2011-02-21