2011-09-14 4 views
2

Play Frameworkで!経由してダッシュボードを削除するとき、私は "(dashboard.delete)"、何らかの理由でManyToOneカスケードが動作しない

@Entity 
public class Dashboard extends Model { 
    ... 
} 

@Entity 
public class DashboardPosition extends Model { 
    public int orderId; 

    @ManyToOne(cascade=CascadeType.ALL) 
    public Dashboard dashboard; 
} 

、他方では、一方では

:私は2つのモデルを定義しました次のログでエラーが発生します。

12:07:20,190 DEBUG ~ delete from Dashboard where id=? 
12:07:20,204 WARN ~ SQL Error: 23003, SQLState: 23003 
12:07:20,204 ERROR ~ Referential integrity constraint violation: "FKF7C253BD5A49DA96: PUBLIC.DASHBOARDPOSITION FOREIGN KEY(DASHBOARD_ID) REFERENCES PUBLIC.DASHBOARD(ID)"; SQL statement: 
delete from Dashboard where id=? [23003-149] 
12:07:20,204 WARN ~ SQL Error: 23003, SQLState: 23003 
12:07:20,204 ERROR ~ Referential integrity constraint violation: "FKF7C253BD5A49DA96: PUBLIC.DASHBOARDPOSITION FOREIGN KEY(DASHBOARD_ID) REFERENCES PUBLIC.DASHBOARD(ID)"; SQL statement: 
delete from Dashboard where id=? [23003-149] 

これは、私のケースではカスケードが機能していないと思います。 これがなぜ起こっているのか、この問題をデバッグする方法の手掛かりはありますか?

答えて

4

カスケードはアソシエーションの間違った側にあります。

ダッシュボードを削除すると、すべてのダッシュボードの位置が削除されます。しかし、そのポジションの1つを削除するとダッシュボードが削除されることは望ましくありません。したがって、カスケードは、ダッシュボードのpositionsフィールドの@OneToMany注釈で設定する必要があります。

+0

それは働いた。どうもありがとうございました! – fulmicoton

関連する問題