java - Hibernate 对象映射导致 SQL 错误 (errno : 150) with Liquibase

标签 java mysql hibernate 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 CONSTRAINT FKD5C95340EE9D2F8 FOREIGN KEY (routeoutbound) REFERENCES route (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 TABLE ridesingle ADD CONSTRAINT FKD5C95340EE9D2F8 FOREIGN 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 映射到项目使用的数据库时出现此错误。

最佳答案

可能 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/

相关文章:

java - 使用 Hibernate 标准的嵌套集合

java - 对象中带空参数的 Hql 构造函数查询

java - MVP GWT 项目中的 Singleton

java - 设置日历时,DAY_OF_WEEK不正确

java - 无法在 android 5.1.1 中加载带有标记的 map

mysql - django、phpmyadmin 和 mysql?

mysql - 如果查询的最后一个字段是 MySQL,是否需要索引表的一列?

javax.persistence.PersistenceException : org. hibernate.exception.SQLGrammarException:无法使用 heroku PostgreSQL 执行查询

php - android studio 从数据库MYSQL获取 bool 值

mysql - 插入mysql数据库表日期,该日期是从现在起晚几天的日期