2013-06-25 3 views
0

При попытке выполнить ревизию, который должен добавить столбец в таблицу:UnexpectedLiquibaseException: Не знаю, как найти имена таблиц и столбцов

<changeSet id="2013.06.25_2" author="ama"> 
    <preConditions onFail="MARK_RAN"> 
     <not> 
      <columnExists tableName="T_FORCED_DATA" columnName="TRADE_KEY_ID"/> 
     </not> 
</preConditions> 
    <comment>Add column T_FORCED_DATA.TRADE_KEY_ID</comment> 
    <addColumn tableName="T_FORCED_DATA"> 
     <column name="TRADE_KEY_ID" type="numeric(10,0)" defaultValue="NULL"> 
      <constraints nullable="true" references="T_TRADE_KEY" foreignKeyName="TRADE_KEY_ID" /> 
     </column> 
    </addColumn> 
</changeSet> 

Я получаю следующее сообщение об ошибке:

SEVERE 6/25/13 5:35 PM:liquibase: Change Set db/changelog/_2013/_06/_05/update_T_FORCED_DATA.xml::2013.06.25_2::ama failed. Error: Don't know how to find table and column names from T_TRADE_KEY liquibase.exception.UnexpectedLiquibaseException: Don't know how to find table and column names from T_TRADE_KEY 
    at liquibase.sqlgenerator.core.AddColumnGenerator.addForeignKeyStatements(AddColumnGenerator.java:93) 
    at liquibase.sqlgenerator.core.AddColumnGeneratorDefaultClauseBeforeNotNull.generateSql(AddColumnGeneratorDefaultClauseBeforeNotNull.java:91) 
    at liquibase.sqlgenerator.core.AddColumnGeneratorDefaultClauseBeforeNotNull.generateSql(AddColumnGeneratorDefaultClauseBeforeNotNull.java:26) 
    at liquibase.sqlgenerator.SqlGeneratorChain.generateSql(SqlGeneratorChain.java:30) 
    at liquibase.sqlgenerator.SqlGeneratorFactory.generateSql(SqlGeneratorFactory.java:150) 
    at liquibase.executor.AbstractExecutor.applyVisitors(AbstractExecutor.java:22) 
    at liquibase.executor.jvm.JdbcExecutor.access$000(JdbcExecutor.java:36) 
    at liquibase.executor.jvm.JdbcExecutor$1ExecuteStatementCallback.doInStatement(JdbcExecutor.java:82) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:104) 
    at liquibase.database.AbstractDatabase.execute(AbstractDatabase.java:1091) 
    at liquibase.database.AbstractDatabase.executeStatements(AbstractDatabase.java:1075) 
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:317) 
    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:27) 
    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:58) 
    at liquibase.Liquibase.update(Liquibase.java:114) 
    at org.liquibase.maven.plugins.LiquibaseUpdate.doUpdate(LiquibaseUpdate.java:31) 
    at org.liquibase.maven.plugins.AbstractLiquibaseUpdateMojo.performLiquibaseTask(AbstractLiquibaseUpdateMojo.java:24) 
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:305) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 

Кто-нибудь знает, почему я получаю это исключение?
Для справки: У меня есть таблица под названием T_TRADE_KEY со столбцом TRADE_KEY_ID.

Благодаря

ответ

1

Глядя на код LiquiBase и по трассировке стека вы предоставили LiquiBase проверяет на references="T_TRADE_KEY" с регулярным выражением из: ([\\w\\._]+)\\(([\\w_]+)\\). Хотя это не соответствует, вы получаете ошибку.

Регулярное выражение ожидает что-то с помощью скобок.

Так что я думаю, что-то вроде:

references="T_TRADE_KEY(TRADE_KEY_ID)" 

должен работать.

Атрибут foreignKeyName не является именем столбца внешнего ключа, а просто именем для внешнего ключа.

Возможно, документация на теге <constraint> также помогает.

Смежные вопросы