3

エンティティが削除された場合、ここを使用すると、これと他のエンティティ@OnDeleteが削除されますか? Hibernate の注釈参照から何かを理解できない..だから、正しく理解していることを確認するためにあなたの助けが必要だ.InventoryPreferenceInventory

public class InventoryPreference {
    ...

    @ManyToOne
    @OnDelete(action = OnDeleteAction.CASCADE)
    @JoinColumn(name = "inventory_id", nullable = false)
    public Inventory getInventory() {
        return inventory;
    }
}

エンティティが削除された場合、エンティティですべてのs を削除するためにもInventory使用する必要がありますか?CascadeType.ALLInventoryPreferenceInventory

public class Inventory {
    ...

    @OneToMany(mappedBy = "inventory", cascade = CascadeType.ALL)
    public Set<InventoryPreference> getPreferenceItems() {
        return preferenceItems;
    }
}

最初の質問が正しければ、 の要点がわかりませんCascadeType.ALL。そうでない場合、これらのそれぞれは何をし、が削除InventoryPreferenceされたときに s を削除するために指定する必要がある注釈と構成は何Inventoryですか? Inventoryああ、削除されても削除されたくありませんInventoryPreference。あまりにも明白である場合は申し訳ありません。

4

1 に答える 1

2

彼らは多少異なることをします。 @OnDeleteスキーマ生成命令です。外部キー (または同等のダイアレクト) 用に生成された DDL の末尾に「on delete cascade」を追加します。データベースの生成に hibernate を使用していない場合、何もしません。

またはのcascadeプロパティは、追加の実際の SQL ステートメントを生成するために実行時に使用されるものです。それはおそらく、データベース テーブルでオンになっているカスケードを削除するのではなく、子を削除するための追加の削除ステートメントです。インベントリを削除するときに InventoryPreferences を削除する必要がある場合は、次のようにします。@OneToMany@ManyToOne

@OneToMany(mappedBy = "inventory", cascade = CascadeType.REMOVE, orphanRemoval=true)
public Set<InventoryPreference> getPreferenceItems() {
    return preferenceItems;
}

そしてもちろん、設計に応じて追加のカスケード タイプを追加します。

于 2011-06-22T17:07:47.317 に答える