映射一对多的关系和新列添加



我有两个表玩家和匹配。我需要玩家和匹配之间的一对多关系,以便我得到的 JSON 输出如下所示:-

{
id : 1,
name : "Peter",
nationality: "Indian",
matches: [
{
id : 1,
location: "Mohali"
TournamentName: "FA Cup"
},
{
id : 2,
location: "Kolkata"
TournamentName: "ISL league"
}
]
}

您能否建议如何定义注释并获得上述结果?我有这样写的代码:-

@Entity
public class Match {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="match_id")
private Integer mId;
private String seriesName;
private String location;
@ManyToOne
private Player player;

而玩家是这样的:-

@Entity
public class Player {
@Id
@GeneratedValue
@Column(name="player_id")
private Integer pId;
private String pName;
private String cricketTeam;
@OneToMany(mappedBy = "player" ,cascade = CascadeType.ALL)
private List<Match> matches;

除此之外,我还需要在我的结果 JSON 中有一个额外的属性,即:-

totalGoals: 8

此属性将计算球员在每场比赛中的进球总数,因此必须有一个带有列的新表:- "player_id"、"match_id"和"总进球">

如果您能提供一个好的方法,那将非常有帮助

对于您的第一个问题,我认为您不需要做任何额外的努力,尝试将 Player 用作 RestController 的返回对象(我更喜欢 DTO 作为像 PlayerDTO 这样的返回对象,因为您可以根据需要进行自定义更改(

@RequestMapping<!--mapping--!>
public ResponseEntity<Player> getPlayer(<expected Params as playerId>)
{
return ResponseEntity.ok(service.find(id));
}

对于第二个问题,您可以在匹配对象本身中维护一个参数 totalGoals,除非你有其他要求,否则您不需要另一个映射表

最新更新