3

Hibernateリバースエンジニアリングが生成するものはすべて次のようなものです

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "column_id")
    public Itinerary getColumnId(){
        this.columnIdを返します。
    }

このシナリオが必要です。セッションがフラッシュされると、FKの制約に従って、最初にすべての構築された子が保存され、次に親オブジェクトが保存されました。

もちろん、FKの制約があるため、子供を最初に(自動的に!)保存する必要があります。

CASCADEオプションがありますが、JPAでどのように使用するのですか?

次のようにカスケードを追加してみました。

    @ManyToOne(fetch = FetchType.LAZY、cascade = CascadeType.PERSIST)
    @JoinColumn(name = "column_id")
    public Itinerary getColumnId(){
        this.columnIdを返します。
    }

私には効かない。

最初に教えてください:このディレクティブで注釈を付ける必要があるものと、それを機能させる方法。

「子行を追加または更新できません:外部キー制約が失敗します」という例外が発生します。

そして確かに、私はすべてを手で固執したくありません!1つのオブジェクトのみを作成し、それを永続化します。

何に注釈を付け、どのディレクティブをどのように使用しますか?

4

3 に答える 3

3

カスケードアノテーションをマッピングの親端に配置してみてください。

@OneToMany(cascade = { CascadeType.PERSIST, 
                       CascadeType.MERGE, 
                       CascadeType.REMOVE },
           mappedBy = "children")
private Set<Children> children = new HashSet<Children>();

これらのカスケードオプションがすべて必要な場合と不要な場合があります。選択してください。

念のため、こちらのリファレンスページをご覧ください。

于 2010-04-07T13:07:54.257 に答える
1

本当に必要なのは

cascade=CascadeType.SAVE_UPDATE

しかし、それはJPAの一部ではありません。したがって、代わりにこれを使用できます。

cascade=CascadeType.ALL

これにはSAVE_UPDATEが含まれます(Hibernate実装を使用)。しかし、それはあなたが好きではない他のカスケードを含むかもしれません。

于 2010-04-07T13:05:44.890 に答える
0

JPAとHibernateのプライベートアノテーションを組み合わせる必要があります。ドキュメントを参照してください。

于 2013-02-21T13:16:22.607 に答える