我需要解决这个问题:
@Entity
public class Team
{
@OneToMany // how mapped it ?
private List<Match> matches; // all played and coming matches
}
@Entity
public class Match
{
@ManyToOne
@Column( nullable = false )
private Team teamA;
@ManyToOne
@Column( nullable = false )
private Team teamB;
}
如果我有Team team;
之类的字段,那么使用mappedBy = team;
会更容易。
我可以使用List团队而不是两个字段并添加@ManyToMany注释,但这不是一个好的解决方案imho。
答案 0 :(得分:0)
假设您的Match表具有Team表的team_id(外键)主键。此代码可能对您有所帮助。 tam有很多比赛,很多球队都与一场比赛相关联。
在您的团队实体中:
@OneToMany(mappedBy = "team", cascade = CascadeType.ALL)
List<Match> matches= []
在您的匹配实体中:
@ManyToOne
@JoinColumn(name = "TEAM_ID")
Team team
答案 1 :(得分:0)
事实上,许多比赛可以与一个球队相关联,并且许多球队(正好2个)可以与比赛相关联。
由于你想要一个包含所有匹配项的列表,而团队没有在团队中分成两个映射(对于A或B),我建议你在它们之间使用@ManyToMany关系映射。
答案 2 :(得分:0)
你的问题在于你需要记住,有些比赛是在家里和#34;有些比赛是&#34;远离#34;像homeTeam
和awayTeam
一样考虑它会比teamA
和teamB
更容易。
每个小组将有一组OneToMany
主场比赛和另外一组OneToMany
用于客场比赛。然后,如果需要,您可以添加一个方便的方法来获取所有匹配。
@Entity
public class Team {
@OneToMany(mappedBy="homeTeam")
private Set<Match> homeMatches = new HashSet<>();
@OneToMany(mappedBy="awayTeam")
private Set<Match> awayMatches = new HashSet<>();
// getters and setters
// special getter if you want it
public Set<Match> getAllMatches() {
Set<Match> allMatches = new HashSet<>();
allMatches.addAll(homeMatches);
allMatches.addAll(awayMatches);
return allMatches;
}
}
@Entity
public class Match {
@ManyToOne
@JoinColumn(name = "HOME_TEAM_ID", referencedColumnName = "TEAM_ID")
private Team homeTeam;
@ManyToOne
@JoinColumn(name = "AWAY_TEAM_ID", referencedColumnName = "TEAM_ID")
private Team awayTeam;
}