2016-08-17 8 views
0

OneTOManyオプションを使用して2つのエンティティクラスを作成しようとしています。以下は私のテーブルの構造です。OneToManyまたはManyToMany HibernateのMappring

|    |  |     | 
| EVENTS |  | PARTICIPANT | 
|_____________|  |__________________| 
|    |  |     | 
| *EVENT_ID | --> | *EVENT_ID  | 
| EVENT_DATE |  | *EMAIL   | 
| TITLE  |  | PARTICIPANT_NAME| 
|_____________|  |__________________| 

イベントIDは自動生成され、イベントに関連する参加者はイベントの詳細と共に保存されます。以下は私のエンティティクラスです。

@Entity 
@Table(name = "EVENTS") 
public class Event{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name = "event_id") 
    private Integer eventId; 

    @column(name = "event_date") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date eventDate; 
    @OneToMany(fetch = FetchType.EAGER) 
    @JoinColumn(name = "event_id") 
    private List<Participant> participantList; 
    //getters and setters 
} 

@Entity 
@Table(name = "PARTICIPANT") 
public class Participant{ 
    @Id 
    @Column(name = "event_id") 
    private Integer eventId; 

    @Id 
    @column(name = "email") 
    private String email; 

    @Column(name = "participant_name") 
    private String participantName; 
    //getters and setters 
} 

新しいEVENTを作成する際に、参加者リストを設定して保存しようとしています。日付を変更して保存した予定を変更して参加者を削除し、新しい参加者を追加すると、余計な労力をかけずに参加者テーブルを更新したいと思う。どちらが正しい注釈であるか。私はHibernate 4.3.10バージョンを使用しています。 参加者リスト全体がないので、新しいマッピングテーブルを作成したくありません。前もって感謝します。

答えて

0

私は、日付を変更して保存したイベントを変更し、いくつか 参加者を削除し、私は、コール保存余分な努力なし 参加者のテーブルを更新する新しい参加者を追加する場合。

あなたは(関係から削除されたエンティティに削除操作を適用し、それらのエンティティへの削除操作をカスケードするかどうか)あなたのEventクラスに必要なカスケード型と孤児削除オプションを選択する必要があります:

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name = "id") 
private Integer id; 

そして、あなたはあなたを実装することにした場合:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "event", cascade = {CascadeType.ALL}, orphanRemoval = true) 
private List<Participant> participantList; 

また、私はParticipantのために別の主キー(id)を持つことを示唆していますOneToManyとソリューション - ManyToOne関係はParticipantに追加します。

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

上記溶液は欠点を持っている - ある参加者は、ただ一つのイベントに関連することができます。同じ参加者が複数のイベントに参加できる場合は、@ManyToManyの関係を使用する必要があります。

関連する問題