我面临以下问题:
对于我的 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 TABLEridesingle
ADD CONSTRAINTFKD5C95340EE9D2F8
FOREIGN KEY (routeoutbound
) REFERENCESroute
(id
) ON UPDATE NO ACTION ON DELETE NO ACTION: Can't create table 'backendtest.#sql-454_5f' (errno: 150)
最让我困惑的是“无法创建表:后端测试”。这根本没有意义,因为 backendtest 是数据库名称而不是表。当我重新部署项目并且 Liquibase 尝试将更改从 migrationdb 映射到项目使用的数据库时,会出现此错误。