SSH解除多对多关联关系的问题

boolean b = student.getCompetitions().remove(competition);
System.out.println(b);
hibernateTemplate.update(student);

这里的b返回的是false,remove方法移除不了,但是removeAll方法可以,不明白为什么

competition在哪里定义的
表是否有定义主键,competition是否在表中存在?