很多人使用hibernate注释进行映射?

时间:2013-03-14 05:39:44

标签: java hibernate hibernate-annotations

我的数据库中有3个表。

我在这里开发的Schema。

一名员工可以参加多个会议,多名员工可以参加一次会议。

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

我在我的应用程序中使用了hibernate。

这是我的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
}

这是对的吗? 因为我不知道如何插入第3张表?

2 个答案:

答案 0 :(得分:0)

由于关联表没有比主表的两个外键更多的信息,因此当您关联对象EmployeeMEETING时,此表中的插入由hibernate管理。所以对我来说你的映射是正确的,如果你遇到问题,不要忘记在两个方向上联系(也就是说,在java中,如果你要将员工添加到会议中,你应该将会议添加到这个员工和副 - 亦然)

(关于另一个主题:你的类名应尊重java约定命名,而不是Meeting而是MEETING)。

答案 1 :(得分:0)

您无需在第三个表中显式插入。当您使用Cascade.ALL级联级别时,任何填充了会议集的员工的保存/持久调用将导致映射表中的自动保存。