我有这2类:更新实体与许多一对多的关系
@Entity
public class Student extends User {
...
@ManyToMany(mappedBy = "members", fetch = FetchType.EAGER)
private Set<Group> groups;
...
public void addGroup(Group group) {
groups.add(group);
}
}
@Entity
@Table(name = "Group")
public class Group implements Serializable {
...
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "member_of")
private Set<Student> members;
...
public void addMember(Student student) {
members.add(student);
}
}
这是管理他们的关系的会话bean:
@Stateless
public class StudentManager extends AcademicManager implements StudentManagerRemote {
...
@Override
public void requestAnswer(long requestID, RequestAnswer answer) {
Request request = entityManager.find(Request.class, requestID);
if(answer == RequestAnswer.YES) {
Student student = request.getStudent();
Group group = request.getGroup();
group.addMember(student);
student.addGroup(group);
entityManager.flush();
entityManager.clear();
}
}
...
}
它不更新数据库。为什么?我为其他关系做同样的事情,但这是我唯一的ManyToMany。
我也试过查询,但没有奏效。
编辑:我编辑了像Mr.J4mes建议的代码,但它仍然不起作用。
此外:为什么.flush()和.clear()没有必要?
你的实体中是否有equals和hashCode方法?如果是这样,给他们看。同时显示getMembers()和getGroups()的代码。代码对我来说看起来很不错(除了清除和清除调用,这是没有用的)。 – 2012-01-05 22:39:54
你确定条件'if(answer == RequestAnswer.YES)'评估为真吗?与问题无关:看起来你也不需要在条件失败的情况下找到'Request'。这些方法不需要被调用,因为'requestAnswer'方法在方法完成时提交的事务中运行。 – 2012-01-05 22:59:09
@βнɛƨнǤʋяʋиɢ该方法比这更复杂,它执行其他控件,我需要这个请求,因为无论答案如何,我都必须在方法结尾删除它(我刚刚发布了不起作用的部分。以前的零件不会修改ojbect,只需检查一些条件)。关于这种情况,我百分百确定它是真的。 – Simon 2012-01-05 23:06:01