0

結合テーブルの行をHibernateに強制的に削除させることができないため、少し混乱しています。おそらく私は何かを別の方法で構成する必要があります。

ComponentとTaskのテーブルと、それらをComponent_Tasksに接続するテーブルがあります。私のクラスのコンポーネントには、次のものがあります。

@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Component_Tasks",
           joinColumns = @JoinColumn(name = "ComponentID"), inverseJoinColumns = @JoinColumn(name = "TaskID"))
public List<Task> getTasks() {
    return tasks;
}

そして私のクラスのタスクで私は持っています

@ManyToOne
@JoinColumn(name = "ComponentID")
public Component getComponent() {
    return component;
}

私が欲しいのは、タスクを削除するときに、デフォルトでComponent_Tasksテーブルの下線付きの行を削除することです。基本的に、外部キーの関係が原因で削除が失敗します

ALTER TABLE Component_Tasks ADD FOREIGN KEY (TASKID)  REFERENCES Tasks (ID); 

タスクのコンポーネントをnullに設定し、オブジェクトを保存してから削除しようとすると、同じ動作を実現できると思います。しかし、私はHibernateにデフォルトでこれを実行させたいと思っています。

助言がありますか?

4

1 に答える 1

0

マッピングが間違っています。コンポーネントでは、コンポーネントとタスクの間の関連付けが結合テーブルによってマップされていると言っています。

また、タスクでは、同じ関連付けがタスクテーブルの結合列によってマップされていると言っています。

決心しなさい。アソシエーションがOneToMany双方向アソシエーションの場合、通常、結合テーブルは不要であり、必要なのは

@OneToMany(cascade = CascadeType.ALL, mappedBy = "component")
public List<Task> getTasks() {
    return tasks;
}

@ManyToOne
@JoinColumn(name = "ComponentID")
public Component getComponent() {
    return component;
}
于 2012-12-22T12:45:05.177 に答える