Uploaded image for project: 'Cayenne'
  1. Cayenne
  2. CAY-2021

cdbimport: detect when same FK constraint is defined twice

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Trivial
    • Resolution: Fixed
    • None
    • 4.0.B1
    • None
    • None
    • MySQL 5.6.13-enterprise-commercial-advanced
      Cayenne 4.0.M3 custom build from rev 0ac54cb

    Description

      I have a table that defines two constraints over the same exact FK/PK pair (this was by mistake, and I have cleaned it up since, but never the less, MySQL treats this as a valid definition) :

      CREATE TABLE `origin` (
      `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `A2_TEAM_ID` int(11) unsigned DEFAULT NULL,
      PRIMARY KEY (`ID`),
      UNIQUE KEY `NAME` (`NAME`),
      KEY `A2_TEAM_ID` (`A2_TEAM_ID`),
      CONSTRAINT `origin_ibfk_1` FOREIGN KEY (`A2_TEAM_ID`) REFERENCES `a2_team` (`ID`),
      CONSTRAINT `FK_ORIGIN_TO_TEAM` FOREIGN KEY (`A2_TEAM_ID`) REFERENCES `a2_team` (`ID`)
      ) ENGINE=InnoDB AUTO_INCREMENT=175 DEFAULT CHARSET=utf8

      When doing cdbimport from Maven, I got the following exception in the logs:

      [ERROR] Migration Error. Can't apply changes from token: Add Relationship (a2Team origin->a2_team.

      {ID, ID})
      java.lang.IllegalArgumentException: An attempt to override relationship 'a2Team'
      at org.apache.cayenne.map.Entity.addRelationship(Entity.java:193)
      at org.apache.cayenne.merge.AddRelationshipToModel.execute(AddRelationshipToModel.java:43)
      at org.apache.cayenne.tools.dbimport.DbImportAction.execute(DbImportAction.java:218)
      at org.apache.cayenne.tools.dbimport.DbImportAction.execute(DbImportAction.java:118)
      at org.apache.cayenne.tools.DbImporterMojo.execute(DbImporterMojo.java:257)
      at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)

      [INFO] Migration Complete.
      [WARNING] Migration finished. The following problem(s) were ignored.
      [WARNING] Validation failure for java.lang.IllegalArgumentException: Migration Error. Can't apply changes from token: Add Relationship (a2Team origin->a2_team.{ID, ID}

      )

      So the exception was caught and the build ultimately succeeded, but the stack trace in the default Maven log made me think there was something wrong with the build. Perhaps we reduce the log level for the stack trace to DEBUG. The WARNING after it should be enough.

      So perhaps we don't log the stack trace in this situation

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            ntimofeev Nikita Timofeev
            andrus Andrus Adamchik
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Issue deployment