2013-03-14 72 views
0

我在我的數據庫中有3個表。許多使用hibernate註釋進行映射?

我在這裏開發的架構。

一名員工可以參加多個會議,一名會議可以由多名員工完成。

http://sqlfiddle.com/#!4/653a40

我用我的應用程序休眠。

這是我的pojos。

@Entity 
@Table(name="emp") 
public class Employee 
{ 
@Id 
    @Column(name="user_id") 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 

    @Column(name="Name") 
    private String name; 

    @Column(name="salary") 
    private String salary; 

    @ManyToMany(cascade = {CascadeType.ALL}) 
    @JoinTable(name="emp_meeting", 
      joinColumns={@JoinColumn(name="user_id")}, 
      inverseJoinColumns={@JoinColumn(name="meetingId")}) 
private Set<MEETING> meetings= new HashSet<MEETING>(); 


    // getter and setter 
} 



@Entity 
@Table(name="MEETING") 
public class MEETING{ 


    @Id 
    @Column(name="meetingId") 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int mid; 

    @Column(name="agenda") 
    private String agenda; 

    @ManyToMany(mappedBy="meetings") 
    private Set<Employee> emps= new HashSet<Employee>(); 

    //gettter and setter 
} 

這是正確的嗎? 因爲我不知道如何插入第三表?

+0

無論如何,第三張桌子是什麼? – SudoRahul 2013-03-14 05:41:32

+0

請檢查我的DB模式在sqlfiddle .Link是在問題 – Thinker 2013-03-14 05:45:25

回答

0

由於您的關聯表沒有比主表的兩個外鍵更多的信息,因此當您關聯對象EmployeeMEETING時,此表中的插入操作將通過休眠進行管理。所以對我來說,你的映射是正確的,如果你遇到問題,不要忘記在兩個方向上關聯(也就是說,在java中,如果你要添加一個員工參加一個會議,你應該添加會議給這個員工,相反)

(關於另一個話題:你的班級名稱應尊重java公約命名,並且Meeting而不是MEETING)。

+0

但我將如何獲得響應列的值。我沒有把它和我的pojo聯繫起來。 – Thinker 2013-03-15 04:47:20

0

您不需要在第三個表中明確插入。當您正在使用Cascade.ALL級聯級別時,與已填充會議集的Employee的任何保存/持續調用將導致在映射表中自動保存。