0

私は3つのテーブルを持っています:PlaylistAdvertisementPlaylistadMap(テーブルに参加)

1-プレイリスト

@Entity
@Table(name = "playlist", catalog = "advertisedb")
public class Playlist implements java.io.Serializable {


    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<PlaylistadMap> PlaylistadMaps = new HashSet<PlaylistadMap>(0);

}

2-広告

@Entity
@Table(name = "advertisement", catalog = "advertisedb")
public class Advertisement implements java.io.Serializable {


    @OneToMany(fetch = FetchType.LAZY, mappedBy = "advertisement")
    private Set<PlaylistadMap> PlaylistadMaps = new HashSet<PlaylistadMap>(0);

}

3 -PlaylistadMap

@Entity
@Table(name = "playlist_ad_map", catalog = "advertisedb")
public class PlaylistadMap implements java.io.Serializable {


    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "fk_advertisement", referencedColumnName = "pkid", nullable = false)
    private Advertisement advertisement;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "fk_playlist", referencedColumnName = "pkid", nullable = false)
    private Playlist playlist;

}

プレイリスト1のデータベースに3つの関連広告があるとします。

(1,1)(1,2)(1,3)古い広告にさらに3つの広告を追加しようとすると、更新されるリストに(1,1)(1,2)(1,3 )(1,4)(1,5)(1,6)DB内のレコードは次のようになります。

(1,1)(1,2)(1,3)(1,1)(1,2)(1,3)(1,4)(1,5)(1,6)

すべてのレコードを削除してから新しいレコードを挿入して、重複するレコードを手動で削除する必要がありますか?または、この問題の休止状態に解決策があります。

4

1 に答える 1

3

mappedByマッピングが間違っています。PlayListの属性を忘れたため、単一の双方向の関連付けではなく、PlaylistとPlaylistadMapの間に2つの異なる関連付けを定義しました。

いいえ、既存の広告を削除してセットに再度追加する必要はありません。何も変わりません。セットに3つの新しい広告を追加し、関連付けの反対側が正しく初期化されていることを確認してください。すべてが正常に機能するはずです。

また、カスケードは問題とは関係がないことに注意してください。カスケードとは、エンティティに対してXを実行する場合、関連するエンティティに対してもXを実行することを意味します。ここでは、エンティティ間の関連付けを作成しているだけです。カスケードするものは何もありません。

于 2012-06-04T14:54:09.983 に答える