我有一个目标表,一个匹配表和一个竞赛表。 每个目标都有一个matchId,每个匹配都有一个competitionId所以如果我想从比赛中检索所有目标,我会这样做:
select * from mydb.goal g
JOIN mydb.matches m
ON g.goal_match = m.matchid
JOIN mydb.competitions c
ON m.competition = c.competitionid
WHERE c.competitionid = 219;
我有一个Spring数据JPA项目,我有我的3个实体这是目标:
@Entity
public class Goal {
@Id
private long idgoal;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "goalMatch")
private Match goalMatch;
public long getIdgoal() {
return idgoal;
}
public void setIdgoal(long idgoal) {
this.idgoal = idgoal;
}
public Match getGoalMatch() {
return goalMatch;
}
public void setGoalMatch(Match goalMatch) {
this.goalMatch = goalMatch;
}
}
这是匹配
@Entity(name = "matches")
public class Match {
@Id
@GeneratedValue
private long idmatch;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "competition")
private Competition competition;
public long getIdmatch() {
return idmatch;
}
public void setIdmatch(long idmatch) {
this.idmatch = idmatch;
}
public Competition getCompetition() {
return competition;
}
public void setCompetition(Competition competition) {
this.competition = competition;
}
}
竞争:
@Entity(name = "competitions")
public class Competition {
@Id
private Long idcompetitions;
public Long getIdcompetitions() {
return idcompetitions;
}
public void setIdcompetitions(Long idcompetitions) {
this.idcompetitions = idcompetitions;
}
}
然后我有了我的目标存储库,我试图找到一种从竞争中检索所有目标的方法,但除了使用长@Query之外我无法找到方法。
Spring Data JPA有直接的方法吗? 或者我应该只使用自定义@Query?
答案 0 :(得分:2)
JB Nizet非常接近:
正确的查询是:
@Query("select g from Goal g where g.goalMatch.competition.idcompetitions = :competitionId")