2012-06-04 2 views
0

У меня есть 3 таблицы: Playlist, Реклама, PlaylistadMap (Join Таблица)@OneToMany сохранить дубликаты записей

1- PlayList:

@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) записей в БД будут:

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

Мне нужно удалить дубликаты записей вручную, удалив все записи, затем вставьте новые? или есть решение в спящем режиме для этой проблемы.

ответ

3

Ваше несоответствие: вы определили две разные ассоциации между списком воспроизведения и списком воспроизведения в PlaylistadMap вместо одного двунаправленного, потому что вы забыли атрибут mappedBy в PlayList.

И нет, вам не нужно удалять и повторно добавлять существующие объявления в набор. Это ничего не изменит. Просто добавьте 3 новых объявления в набор, убедитесь, что другая сторона ассоциации инициализирована правильно, и все должно быть хорошо.

Также обратите внимание, что каскадирование не связано с вашей проблемой. Каскадирование означает: когда я делаю X на сущности, также выполняю X на ассоциированных объектах. Вы просто создаете связь между сущностями здесь. Каскада нет.

Смежные вопросы