2011-12-05 3 views
3

두 개의 엔티티 User 및 Event가 있습니다. 각 사용자는 자신이 좋아하는 이벤트 목록을 가지고 있습니다. 그래서 나는 다음과 같은 OneToMany 맵을 설정 : JPA onetomany joint table 정보

@Entity 
@Table(name = "user") 
public class User { 
    @Id 
    @Column(name = "login", length = 64) 
    protected String login; 

    @OneToMany(cascade = CascadeType.ALL) 
    @LazyCollection(LazyCollectionOption.FALSE) 
    @JoinTable(name = "user_events", 
     joinColumns = {@JoinColumn(name = "login")}, 
     inverseJoinColumns = {@JoinColumn(name = "event_id")}) 
    protected List<Event> events; 
} 

@Entity 
@Table(name = "events") 
public class Event extends BaseEntity{ 
    @Id 
    @Column(name = "event_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    protected Long eventId; 

    @Column(name = "title", length = 200) 
    protected String title; 
} 

지금 내가 먼저 내가 하나의 사용자 이벤트와 제대로 업데이트 데이터베이스의 공동 테이블처럼 만들어, 두 명의 사용자가 있습니다. 그런 다음 동일한 이벤트와 같은 다른 사용자를 만들지 만 이번에는 중복 키 값이 고유 제약 조건 "user_events_event_id_key"을 위반한다고하는 오류가 있습니다. 나는 관절 테이블에 어떤 제한도 설정하지 않았으므로이 제한이 어디에서 오는지는 알지 못합니다. 아무도 내가이 제약 조건을 제거하도록 도울 수 있습니까? 고마워.

답변

0

제약 조건은 스키마를 생성 할 때 Hibernate에 의해 설정되었을 것입니다. OneToMany로 연결을 지정 했으므로 한 명의 사용자 만 주어진 이벤트를 좋아한다고 가정합니다. Hibernate는 join 테이블의 event_id 컬럼에 유일 컨 스트레인 트를 설정함으로써 보장한다.

연결은 ManyToMany 여야하며이 사용자가 삭제 될 때 사용자가 좋아하는 모든 이벤트가 삭제되므로 CascadeType.ALL을 사용하면 안됩니다.

+0

대단히 감사합니다! – John

+0

빠른 질문 하나 : @ManyToOne은 어떨까요? 어떤 장소에 제약이 있습니까? – John

+0

ManyToOne은 한면의 PK를 가리키는 여러면에서 외래 키를 사용하여 구현됩니다. 여기서 유일한 제약 조건은 필요 없습니다. –