2012-06-04 2 views
0

을 저장 @OneToMany내가 3 개 테이블이 중복 레코드

@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 :

(1,1) (1,2) (1,3) :

@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 개)와 관련된 광고를 가지고 있다고 가정 할 이전 광고에 3 개의 광고를 더 추가하려고 시도하는 경우 업데이트 될 목록에 (1,1) (1,2) (1,3) (1,4) (1,5) (1, 6) DB의 레코드는 다음과 같습니다.

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

모든 레코드를 삭제하여 수동으로 중복 레코드를 제거해야합니까? 새로운 것들? 또는이 문제에 대한 최대 절전 모드의 해결책이 있습니다.

답변

3

매핑이 잘못되었습니다 : 재생 목록에 mappedBy 속성을 잊어 버렸기 때문에 재생 목록과 PlaylistadMap 사이에 두 개의 서로 다른 연결을 정의했습니다.

아니요. 기존 광고를 삭제하고 다시 추가 할 필요가 없습니다. 그것은 아무 것도 바뀌지 않을 것입니다. 3 개의 새 광고를 세트에 추가하고 연관의 다른 쪽이 올바르게 초기화되었는지 확인하고 모든 것이 잘되어야합니다.

계단식은 문제와 관련이 없습니다. 계단식 의미 : 엔티티에서 X를 수행 할 때 연관된 엔티티에서도 X를 수행합니다. 여기 엔 엔티티들 사이에 연관성이 생기고 있습니다. 캐스케이드 할 것은 없습니다.