2017-04-23 2 views
0

나는 세 가지 클래스가 있습니다.
사용자는 여러 가지 이벤트에 대해 하나의 이벤트를 구성하거나 참석자가 될 수 있습니다.
이벤트에는 주최자가 하나만 있고 많은 참석자가있을 수 있습니다.
Attende - (내가 @ManyToMany 주석을 사용하지 않는 이유는 그게 전부) 이벤트 테이블 바인딩 사용자 및이 추가 필드 참석자 클래스의봄 휴식 많은 응답 많은

나는 그가 참석 이벤트 내 응답 쇼 사용자를 원하지만 어떻게 든 제외 "사용자"필드 .
이벤트를 검색 할 때 참석자 클래스에서 "이벤트"를 제외하고 싶습니다.

나는 사용자 표현 및 이벤트 표현을 위해 Dto를 작성하는 것에 대해 설명하지만, 모든 코드를 복제하는 것처럼 느껴집니다.
참석자 클래스에 주석을 달 수있는 방법이 없으므로 이벤트에는 한 가지만 표시되고 사용자에게는 다른 것을 표시합니다.
@JsonManagedReference와 @JsonBackReference에 대해 읽었지 만 여기서는 도움이되지 않을 것입니다.

@Entity 
@Table(name = "calendar_users") 
public class User extends BaseEntity { 

    @Column(nullable = false) 
    private String name; 

    @OneToMany(mappedBy = "user") 
    private List<Attendee> attendeeEvents; 

    @OneToMany(mappedBy = "organizer") 
    private List<Event> organizedEvents; 
} 

@Entity 
@Table(name = "events") 
public class Event extends BaseEntity { 

    @Column(nullable = false) 
    private String name; 

    @ManyToOne(optional = false) 
    @JoinColumn(name = "user_id") 
    private User organizer; 

    @OneToMany(mappedBy = "event") 
    private List<Attendee> attendees; 
} 

@Entity 
@Table(name = "attendees") 
public class Attendee extends BaseEntity { 

    private Date responseTime; 

    @ManyToOne(optional = false) 
    @JoinColumn(name = "response_status_id") 
    private ResponseStatus responseStatus; 

    @ManyToOne(optional = false) 
    @JoinColumn(name = "user_id") 
    private User user; 

    @ManyToOne(optional = false) 
    @JoinColumn(name = "event_id") 
    private Event event; 

}

답변

1

사실 올바른 솔루션은 필요한 정보를 제공하기 위해 DTO 객체를 추가하는 것입니다.

그러나 간단한 경우 두 가지 클래스 Attendee 및 AttendeeSimple (이벤트 없음)을 정의 할 수 있습니다. 그리고 사용자와 이벤트에서 2 가지 엔티티를 사용하십시오.

참석자가 AttendeeSimple을 확장하면 더 간단해질 수 있습니다.