【问题标题】:org.dbunit.database.AmbiguousTableNameException with MySQL 8org.dbunit.database.AmbiguousTableNameException 与 MySQL 8
【发布时间】:2021-02-18 09:49:09
【问题描述】:

谁能帮我解决这个问题?

使用 dbunit-maven-plugin-1.0-beta-3 和 mysql 8 将元数据加载到带有 mysql-connector-java-8.0.22 的数据库表中。

得到如下错误

org.apache.maven.lifecycle.LifecycleExecutionException: Error executing database operation: CLEAN_INSERT
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error executing database operation: CLEAN_INSERT
    at org.codehaus.mojo.dbunit.OperationMojo.execute(OperationMojo.java:109)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    ... 17 more
Caused by: org.dbunit.database.AmbiguousTableNameException: USERTABLE
    at org.dbunit.dataset.OrderedTableNameMap.add(OrderedTableNameMap.java:198)
    at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:227)
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:275)
    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
    at org.dbunit.ant.Operation.execute(Operation.java:195)
    at org.codehaus.mojo.dbunit.OperationMojo.execute(OperationMojo.java:100)
    ... 19 more

顺便说一句,我有两个具有相同表名的数据库。

仅供参考,它适用于 mysql-connoctor-java-5.1.49。但在我们的例子中,我们需要使用 mysql 连接器 8.0.22。

谢谢。

【问题讨论】:

    标签: mysql maven plugins dbunit mojo


    【解决方案1】:

    顺便说一句,我有两个具有相同表名的数据库。

    开启Qualified Table Names 功能可以解决问题吗?如果用户有多个,dbUnit 可能需要知道使用哪个模式。

    例如,功能页顶部有一个。还有一个使用PrepAndExpectedTestCase的完整示例。

    大体思路是:

    final IDatabaseTester databaseTester = new xxxx();
    final IDatabaseConnection dbUnitConnection = databaseTester.getConnection();
    final DatabaseConfig databaseConfig = dbUnitConnection.getConfig();
    config.setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);
    

    【讨论】:

    • 能否请您举例说明如何在 maven 项目中配置限定表名。
    • 解决了您的问题吗?
    • 我已经发布了对我有用的答案。感谢@Jeff 的回答。
    【解决方案2】:

    这是 pom dbunit 配置的一部分,它为我修复了这个配置。

    <schema>test_database</schema>
    <dataTypeFactoryName>org.dbunit.ext.mysql.MySqlDataTypeFactory</dataTypeFactoryName>                    
    <metadataHandlerName>org.dbunit.ext.mysql.MySqlMetadataHandler</metadataHandlerName>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-16
      • 2017-03-07
      • 1970-01-01
      • 2018-12-06
      • 2015-07-25
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多