我有member.objects是画家,木匠和TeamLeads,可以有其他TeamLeads,画家或木匠。有没有办法连接它们,以便我可以获得TeamLeads.team,并且还能够查看谁在TeamLeads.team下工作。我理解如何使用数据库,但想知道组合或聚合是否会处理1:m的关系,如果有一个我可以看到的例子。它是否需要Team.class链接每个人或者它可以由本地引用处理,我只是找不到任何示例。
答案 0 :(得分:0)
所以听起来你有一些带有这种签名的方法来检索TeamLead列表:
public List<TeamLead> getTeamLeads()
从那里,你想得到每个团队的成员,你的TeamLead
课程看起来像这样:
public class TeamLead {
private final List<Person> team = new ArrayList<Person> ();
// You can of course populate this list however is best for your code
public void addTeamMember(Person p) {
team.add(p);
}
public List<Person> getTeam() {
return team;
}
// more code...
}
其中Person
是Painter
,Carpenter
和TeamLead
的基类 - 还有其他方法可以在没有类层次结构的情况下执行此操作,但我会坚持为了便于解释现在这个。
答案 1 :(得分:0)
正如我所看到的,你可以通过私人收藏来做到这一点,私人收藏可以通过修饰符进行管理,修饰符也可以保留反向关系:
public class TeamMember {
private TeamMember leader;
private Set<TeamMember> teamMembers= new HashSet<TeamMember>();
public Set<TeamMember> getTeamMembers(){
return new HashSet<TeamMember>(teamMembers);
}
public void addTeamMember(TeamMember member){
if(member.leader!=null){
member.leader.removeTeamMember(member);
}
member.leader=this;
teamMembers.add(member);
}
public void removeTeamMember(TeamMember member){
member.leader=null;
teamMembers.remove(member);
}
public TeamMember getLeader(){
return leader;
}
}
由于您没有teamMembers或leader的公共setter,更改leader或teamMembers的唯一方法是使用addTeamMember和removeTeamMember方法,因此您可以通过这些方法保持双向关系。
我希望这可能会有所帮助。