次の問題に直面しています。
私のJavaプロジェクトでは、SpringFramework、Maven、データベース管理にはHibernate 3.6、変更管理にはLiquibaseを使用しています。
今、私は頭を悩ます問題に直面しています。これは、Hibernate から作成される外部キー制約に関連しています。
2 クラスには、関係を持つ Object エンティティがあります。次のコードを見てください。
@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 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: エラーの実行中にエラーが発生しました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」です。backendtest はデータベース名であり、テーブルではないため、これはまったく意味がありません。プロジェクトを再デプロイすると、このエラーが発生し、Liquibase は migrationdb からプロジェクトで使用されるデータベースに変更をマップしようとします。