jpa中多对多关系的中间表中的附加列

Aru*_*run 1 java mysql spring hibernate jpa

我有两个类 Game 和 Team ,它们之间存在多对多关系。

游戏:

@Entity
@Table(name = "GAME")
public class Game extends Model {

 @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name="GAME_TEAM", 
                joinColumns={@JoinColumn(name="GAME_ID")}, 
                inverseJoinColumns={@JoinColumn(name="TEAM_ID")})
private List<Team> teams = new ArrayList<Team>();

public List<Team> getTeams() {
    return teams;
}

public void setTeams(List<Team> teams) {
    this.teams = teams;
}
}
Run Code Online (Sandbox Code Playgroud)

团队:

@Entity
@Table(name = "TEAM")

public class Team extends Model {


@Column(name = "TEAM_NAME")
private String teamName;

@OneToMany(mappedBy = "team", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Player> player = new LinkedHashSet<Player>();

@ManyToMany(cascade=CascadeType.ALL, mappedBy="teams") 
private Set<Game> games; 

public Set<Player> getPlayer() {
    return player;
}

public void setPlayer(Set<Player> player) {
    this.player = player;
}

public Set<Game> getGames()  
{  
    return games;  
}  

public void setGames(Set<Game> games) {
    this.games = games;
}

public String getTeamName() {
    return teamName;
}

public void setTeamName(String teamName) {
    this.teamName = teamName;
}
Run Code Online (Sandbox Code Playgroud)

在这两个类 GAME_TEAM 之间有第三个中间表,它具有 team_id、game_id,它们是来自游戏和团队类的 id 的外键。所以每当我更新团队和游戏时,我都会自动更新 game_team。

好的。好的。现在的问题是什么?我有第三列 WON_BY 也必须更新。如果没有这个额外的第三列,我就不必创建第三个类 GameTeam。

要更新不是外键的第三列,我应该为中间表创建一个实体类吗?如果是这样,我应该使用什么样的方法或注释?

Upp*_*rla 5

您需要有一个单独的实体类来保留您的“WON_BY”,并且您需要稍微重构现有的实体类,因为解决方案非常大,请参阅下面的示例,这肯定会解决您的问题。

http://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-with-extra-columns-in-join-table-example