我面临以下问题:
在我的Java项目中,我使用SpringFramework、Maven和数据库管理工具Hibernate 3.6和Liquibase进行更改管理。
现在我正面临一个困扰我的问题。它与将从Hibernate创建的外键约束相关。
两个类具有具有关系的对象实体。注意以下代码:
@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日志中得到的结果错误:
严重26.07.12 10:12:液化:更改集classpath:dbchangelog.xml::1343227727949-11::mirco (生成)失败。错误:在更新时执行SQL
ridesingle添加约束FKD5C95340EE9D2F8外键(routeoutbound)引用route(id)没有对删除操作的操作:无法创建表'backendtest。#SQL454_5f (errno: 150) liquibase.exception.DatabaseException:错误执行SQLridesingle添加约束FKD5C95340EE9D2F8外键(routeoutbound)引用route(id)在更新时不执行任何操作,删除任何操作:无法创建表‘backendtest。#SQL454_5f‘(errno: 150)
最让我困惑的是“不能创建表:后台测试”。这完全没有意义,因为后端测试是数据库名,而不是表。当我重新部署项目时,当Liquibase试图将迁移数据库中的更改映射到项目使用的数据库时,就会出现这个错误。
发布于 2012-12-18 07:18:46
也许Liquibase或它的配置有问题:一些DBMS对临时表使用#前缀,这使我相信,无论是Liquibase还是MySQL,还是中间的某个层,都试图通过“复制-拖放-创建-复制”过程来执行ALTER TABLE,在这个过程中创建一个临时表。
发出ALTER TABLE的用户在backendtest数据库中有CREATE [TEMPORARY] TABLE特权吗?
https://stackoverflow.com/questions/11665718
复制相似问题