我有一个父表和子表之间的多对多关系。
这是Parent类中映射此关系的部分:
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "parents_children",
joinColumns = { @JoinColumn(name = "PARENT_ID", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "CHILD_ID", nullable = false, updatable = false) })
protected Set<Child> children = new HashSet<Child>();
这是我子类中的部分代码:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, mappedBy = "children")
protected Set<Parent> parents;
现在,如果我定义了一个名为child
的Child对象和一个名为parent
的Parent对象,从父级方面添加子级将起作用:
parent.getChildren().add(child);
这会在数据库中正确更新,并将条目保存到parents_children
表中。
但是当我从另一端尝试进行操作时,也就是从子代那里,我想设置父代。如果我已经定义了Set<Parent> parents
并且在我的Children
类中定义了updateParents()
方法,并且我从数据库中加载了一个孩子定义为child
,我尝试执行以下操作:
public void updateParents() {
Set<Parent> parents = //get this from somewhere
child.setParents(parents);
update();
}
这种方法行不通,我正在努力找出原因。如果我将方法修改为以下内容,则可以运行:
public void updateParents() {
Set<Parent> parents = //get this from somewhere
for (Parent parent : parents) {
parent.getChild().add(this);
}
}
我在关系定义上做错了什么吗?我已经有一段时间没有使用Java了,我忘记了这个。
有人能指出我做错了什么,以便我可以将父对象添加到子对象中吗?