我现在面临的以下问题:Hibernate对象的映射导致SQL错误(错误:150)与Liquibase
对于我的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: Change Set classpath:dbchangelog.xml::1343227727949-11::mirco (generated) failed. Error: Error executing SQL ALTER TABLE
ridesingle
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) liquibase.exception.DatabaseException: Error executing 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发出的更改映射到项目使用的数据库。
错误,例如'不能创建表'后端测试。#sql-454_5f''可能表示约束之间有些冲突。例如,您可能需要在创建新约束之前删除旧约束。虽然我不确定Liquibase如何处理它。 – axtavt 2012-07-26 09:32:17
嗨@axtvat。 Thx 4你的回答。你是对的,这确实与conatrint有关。但liquibase应该处理这个问题。我做了几十个这样的约束,从来没有一个问题......我想我得花更多的时间分析出了什么问题...... – m0rb 2012-07-26 14:32:24