4

我面临以下问题:

对于我的 Java 项目,我使用 SpringFramework、Maven 和数据库管理 Hibernate 3.6 和 Liquibase 进行变更管理。

现在我面临一个困扰我的问题。它与应从 Hibernate 创建的外键约束有关。

2 类具有具有关系的对象实体。观看以下代码:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class SearchSingle extends OfferSearch implements Comparable<SearchSingle>,   OfferSingle {
    private static final long serialVersionUID = 7618785527154737982L;

@ManyToOne
private Route routeOutbound;

@ManyToOne
private Route routeWayBack;
...
...
}

现在另一个类有相应的对象:

@JsonAutoDetect
@Entity
public class Route extends PersistentObject {

private static final long serialVersionUID = -4611710805557036851L;
@OneToMany(mappedBy = "routeOutbound")
@Cascade(CascadeType.SAVE_UPDATE)
private List<SearchSingle> searchesOutbound;

@OneToMany(mappedBy = "routeWayBack")
@Cascade(CascadeType.SAVE_UPDATE)
private List<SearchSingle> searchesWayBack;

...
}

在这里查看我在 tomcat 日志中得到的错误:

SEVERE 26.07.12 10:12:liquibase: 更改集类路径:dbchangelog.xml::1343227727949-11::mirco (生成) 失败。错误:执行 SQL 更改表ridesingle添加约束 FKD5C95340EE9D2F8外键 ( routeoutbound) 引用route ( id) 时出错执行 SQL ALTER TABLE ridesingleADD CONSTRAINT FKD5C95340EE9D2F8FOREIGN KEY ( routeoutbound) REFERENCES route( id) ON UPDATE NO ACTION ON DELETE NO ACTION: Can't create table 'backendtest.#sql-454_5f' (errno: 150)

最让我困惑的是“无法创建表:后端测试”。这根本没有意义,因为 backendtest 是数据库名称而不是表。当我重新部署项目并且 Liquibase 尝试将更改从 migrationdb 映射到项目使用的数据库时,会出现此错误。

4

1 回答 1

0

也许 Liquibase 或其配置存在问题:一些 DBMS 使用#临时表前缀的事实使我相信 Liquibase 或 MySQL 或两者之间的某个层尝试ALTER TABLE通过“复制-删除-创建-复制”执行过程中创建一个临时表。

发出的用户是否在数据库中ALTER TABLE具有CREATE [TEMPORARY] TABLE特权backendtest

于 2012-12-18T07:18:46.400 回答