我面临以下问题:
对于我的 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 映射到项目使用的数据库时出现此错误。
最佳答案
可能 Liquibase 或其配置存在问题:某些 DBMS 对临时表使用 #
前缀这一事实让我相信 Liquibase 或 MySQL 或两者之间的某个层试图执行ALTER TABLE
通过“copy-drop-create-copy”过程在过程中创建临时表。
发出 ALTER TABLE
的用户在 backendtest
数据库中是否具有 CREATE [TEMPORARY] TABLE
权限?
关于java - Hibernate 对象映射导致 SQL 错误 (errno : 150) with Liquibase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665718/