4

次の問題に直面しています。

私の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 ridesingleADD CONSTRAINT FKD5C95340EE9D2F8FOREIGN 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: エラーの実行中にエラーが発生しましたSQL ALTER TABLE ridesingleADD CONSTRAINT FKD5C95340EE9D2F8FOREIGN KEY ( routeoutbound) REFERENCES route( id) ON UPDATE NO ACTION ON DELETE NO ACTION: Can't create table 'backendtest.#sql-454_5f' (errno: 150)

私を最も混乱させるのは、「テーブルを作成できません: backendtest」です。backendtest はデータベース名であり、テーブルではないため、これはまったく意味がありません。プロジェクトを再デプロイすると、このエラーが発生し、Liquibase は migrationdb からプロジェクトで使用されるデータベースに変更をマップしようとします。

4

1 に答える 1

0

Liquibase またはその構成に問題がある可能性があります。一部の DBMS#が一時テーブルにプレフィックスを使用しているという事実から、Liquibase または MySQL、またはその間のレイヤーのいずれかALTER TABLEが「copy-drop-create-copy」によって実行しようとしていると思われます。プロセスで一時テーブルを作成する手順。

を発行したユーザーは、データベースでの権限をALTER TABLE持っていますか?CREATE [TEMPORARY] TABLEbackendtest

于 2012-12-18T07:18:46.400 に答える