2017-04-23 3 views
0

私は3つのクラスを持っています。
ユーザーは、1つのイベントを編成することも、多数のイベントの出席者にすることもできます。
イベントには主催者が1人しかなく、多くの出席者がいます。
Attende - イベントとテーブル結合ユーザー、および追加のフィールドを持っている(ザッツなぜ私は@ManyToManyアノテーションを使用しないでください)バネレスト多対多応答

私は出席者のクラスで、彼が出席し、何とか除外イベント「ユーザー」フィールドと私の応答ショーのユーザーが欲しいです。
イベントを探しているときに、出席者クラスで「イベント」を除外します。

私は、ユーザー表現とイベント表現のためにDtoを作成することをお勧めしますが、すべてのコードを複製するように感じます。
Attendeeクラスに注釈を付ける方法はありますか?Eventでは1つのことが表示され、Userに対しては別のものが表示されますか?
@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つのクラスを定義できます。ユーザーとイベントで2つの異なるエンティティを使用します。

AttendeeがAttendeeSimpleを拡張する場合、より簡単になります。