删除多对多的对象与Hibernate和Java的关联

时间:2012-03-22 00:33:19

标签: java hibernate

我一直在寻找好几天,但似乎无法找到答案。

鉴于此多对多(员工/会议)

@Entity
@Table(name="EMPLOYEE")
public class Employee {

    @Id
    @Column(name="EMPLOYEE_ID")
    @GeneratedValue
    private Long employeeId;

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name="EMPLOYEE_MEETING",
                joinColumns={@JoinColumn(name="EMPLOYEE_ID")},
                inverseJoinColumns={@JoinColumn(name="MEETING_ID")})
    private Set<Meeting> meetings = new HashSet<Meeting>();
}

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

    @Id
    @Column(name="MEETING_ID")
    @GeneratedValue
    private Long meetingId;

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

我可以将员工添加到会议中,并显示在employee_meeting表中。

当我获得会议对象并将其删除时,它也会从联接表中消失,但仍保留在员工集中......这是预期的行为吗?

以下是删除会议对象的方法

session.delete(meeting);
transaction.commit();

此时它从桌子上消失了。

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,这是正确的行为。如果您有多对多关系,则需要手动删除它。请参阅此链接以查看hibernate collection mapping strategy