2016-08-17 97 views
0

我想用OneTOMany選項創建2個實體類。以下是我的表格結構。OneToMany或ManyToMany在休眠映射

|    |  |     | 
| 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 
} 

在創建新事件時,我設置了參與者列表並嘗試保存。如果我通過更改日期來修改保存的事件並刪除一些參與者並添加新的參與者,我想更新參與者表,而無需額外的努力保存呼叫。哪一個將是使用的正確註釋。我正在使用Hibernate 4.3.10版本。 注意我不想創建新的映射表,因爲我沒有整個參與者列表。提前致謝。

回答

0

如果我通過更改日期修改已保存的事件,並刪除一些 參與者,並添加新的參與者我想,沒有任何額外的努力將通話更新 參與者表。

你應該選擇必要的級聯型和孤兒刪除選項在Event類(是否要刪除操作應用到已經從關係中去除實體和級聯刪除操作這些實體):

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

另外,我建議有單獨的主鍵(id)爲Participant

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

如果您決定實施您的與OneToMany解決方案 - ManyToOne關係添加到Participant

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

上述解決方案已經缺點 - 一個參與者可以只用一個事件相關。如果同一參與者可以參加多於一個事件,則應該使用@ManyToMany關係。