我在这样的表中有这样的关系:
@ManyToOne
@JoinColumn(name="TEAM_HOME", nullable=false)
private Team team;
@Column(name="TEAM_AWAY", insertable=false, updatable=false)
private int teamAway;
这种关系在其他方面:
@XmlTransient
@OneToMany(mappedBy="team",fetch=FetchType.EAGER)
private Set<Result> result;
我想在表格Result中多次引用表格Team中的一列,打赌我不知道怎么做。我尝试了不同的方法但没有成功。
答案 0 :(得分:0)
您需要从团队到结果的两个关系:
@OneToMany(mappedBy="teamHome",...)
private Set<Result> resultsHome;
@OneToMany(mappedBy="teamAway",...)
private Set<Result> resultsAway;
但没有什么可以阻止你添加像
这样的方法public Set<Result> getResults() {
Set<Result> results = new HashSet<>();
results.addAll(resultsHome);
results.addAll(resultsAway);
return results;
}
public void addResult(Result result) {
if (result.teamHome == this) {
resultsHome.add(result);
} else {
resultsAway.add(result);
}
}
我想这不是你所希望的。但是将所有结果放在同一个集合中是不正确的,因为它是不同的。毕竟,你可能想要的东西就像你的&#34;远离&#34; -matches在该集合中的反向结果。
你应该问自己,你是否真的想在你的团队课程中找到这两个关系。难道DAO.getMatchesForTeam(...)没有同样的目的吗?当你真的想要制作一个体育赛事的模型时,你最终可能会在团队中找到很多关系,这会使你的代码变得混乱。 @XMLTransient注释已经表明结果对于团队传输到客户端而言并不重要。
哦,顺便说一句:团队和结果之间有一些东西:比赛。结果应该只保留结果。这样你就可以制作一个Result.inverse()方法,它可以从其他团队的角度给你结果。但是没有像Match.inverse()那样的东西,因为主队永远是主队。