2013-03-14 71 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的任何保存/持续调用将导致在映射表中自动保存。