如何使用Spring数据JPA基于来自另一个实体的列检索实体的数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Spring数据JPA基于来自另一个实体的列检索实体的数据?相关的知识,希望对你有一定的参考价值。

我有一个目标表,一个匹配表和一个竞赛表。每个目标都有一个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?

答案

JB Nizet非常接近:

正确的查询是:

@Query("select g from Goal g where g.goalMatch.competition.idcompetitions = :competitionId")

以上是关于如何使用Spring数据JPA基于来自另一个实体的列检索实体的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写基于作为父实体spring数据jpa的一部分的字段对结果进行排序的查询方法

如何在spring jpa实体中提及sqlserver数据库名称?

Spring Data JPA:嵌套实体的批量插入

使用 Spring Boot 框架对基于 Spring JPA 的 DAO 进行分层的正确方法

如何响应 Spring RestController 返回 ManyToOne 双向 JPA 实体对象?

如何定义来自不同数据源的实体之间的关系?