9
votes

Oracle + dbunit devient ambigu

J'utilise dBunit pour créer des sauvegardes de base de données, qui peuvent être importées et exportées. Ma candidature peut utiliser plusieurs moteurs de base de données: MySQL, PostgreSQL, SQLSERVER, H2 et Oracle.

Toutes les éléments suivants fonctionnent avec le code suivant: p>

!ENTRY es.giro.girlabel.backup 1 0 2012-04-11 11:51:40.542
!MESSAGE Start import backup
org.dbunit.database.AmbiguousTableNameException: AQ$_SCHEDULES
    at org.dbunit.dataset.OrderedTableNameMap.add(OrderedTableNameMap.java:198)
    at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:231)
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:281)
    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
    at es.giro.girlabel.backup.ImportBackup.createData(ImportBackup.java:39)
    at es.giro.girlabel.backup.handlers.Import.execute(Import.java:45)


0 commentaires

5 Réponses :


16
votes

du Docs :

Classe publique AmbiguyTaBlaMameException extends DataSetException

Cette exception est lancée par iDataset lorsque plusieurs tables ayant le Le même nom est accessible. Cela se produit généralement lorsque la base de données La connexion a accès à plusieurs schémas contenant une table identique noms.

Solutions possibles:

1) Utilisez un identifiant de connexion de base de données qui a Accès à un seul schéma de base de données.

2) Spécifiez un nom de schéma à la DatabasEconnection ou DatabasedAtaSourCeconnection Constructeur.

3) Activez le support de nom de la table qualifié (voir Documentation sur la procédure).


4 commentaires

Merci, j'ai déjà résolu ce problème, mais c'était par la solution 1 que vous avez mentionnée.


Je vous utilisez Spring-dbunit , solution 1) peut être obtenu en définissant la propriété système < un href = "https://github.com/excilys/spring-dbunit/issues/18" rel = "nOfollow noreferrer"> printemps.dbunit.schema .


Je l'ai rééquilibré en réglant DatabasEconfigbean # SetQualifetablernes vers true .


Les solutions sont plus clairement expliquées dans ce post: Stackoverflow.com/a/14932264/3396045 . Pour printemps JDBC, je devais faire ceci: Stackoverflow.com/a/64576554/3396045



5
votes

Pour qui utilise Springdbunit. J'avais eu du mal à ce problème très gênant. J'avais fini par résoudre le problème en ajoutant la configuration pour com.github.springtestestdbunit.bean.databaseconfigbean et com.github.springtestdbunit.bean.databasedataSourCeconnectionFactorybean .

Ceci est mon contexte de printemps complet pour Springdbunit xxx


0 commentaires

0
votes

J'ai eu la même exception ambiguërenameException tout en exécutant DBunits Aginst Oracle DB. Cela fonctionnait bien et commençait à jeter une erreur un jour.

Colorale: En appelant une procédure stockée, elle a été modifiée par erreur en minuscule. Lorsqu'il est changé en majuscule, il a regardé de fonctionner.

Je pourrais également résoudre ce problème en définissant le nom de l'œillet à Idatabasester comme Idatabasester.SetSchema ("SchemanameCaps")

Veuillez également vous assurer que votre connexion n'accédait qu'à de nombreux schémas ayant le même nom de table.


0 commentaires

2
votes

Réglage du schéma de base de données résolu pour moi:

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


0 commentaires

0
votes

Vous pouvez rencontrer des problèmes lors de l'importation de données d'hibernate avant que DBUnit fonctionne. Selon la base de données que vous utilisez, le boîtier des noms de table et de colonne pourrait être important.

Par exemple, dans HSQL, les noms de base de données doivent être déclarés en majuscules. Si vous importeriez des données via Import.SQL d'Hibernate, assurez-vous que les noms de table sont également en majuscule, sinon vous vous retrouverez avec le problème suivant:

  • Hibernate crée les tables en minuscule
  • dbunit lit les noms de table de la DB en minuscule
  • DBUNIT tente d'importer ses jeux de données à l'aide de noms de table majuscules
  • Vous vous retrouvez dans un gâchis, avec l'exception de nom ambiguë.

    N'oubliez pas de vérifier également si plusieurs tables ont été créées lors d'une exécution précédente (majuscules et minuscules), auquel cas vous devez le nettoyer aussi.


0 commentaires