私は、レクリエーション バドミントン リーグ (ゲーム統計の登録と分析) の Web ポータルに取り組んでいます。バグ。
クエリですべてのチームを取得すると、アウェイ アウェイで行われたゲーム シリーズを含むはずのフィールドに、ホーム コートで行われたシリーズも含まれます。ただし、ホーム コートでプレーされるシリーズを含むフィールドには、アウェイ アウェイでプレーされるシリーズは含まれません (これは私が望む動作です)。
さらに、クエリを再度実行 (ページを更新) すると、家から離れてプレイしたゲーム シリーズを含むフィールドが拡大し始めます。クエリを実行するたびに、一連のホーム ゲームが再び awaySeries フィールドに登録されます。
例えば:
最初のクエリ:
チーム1
gameSeriesAway: Team1 vs Team2、Team1 vs Team3
gameSeriesHome: チーム 1 対 チーム 3
2 番目のクエリ:
チーム1
gameSeriesAway: Team1 vs Team2、Team1 vs Team3、Team1 vs Team3
gameSeriesHome: チーム 1 対 チーム 3
チーム.java
@Entity
@NamedQueries({@NamedQuery(name = "Team.findAll", query="SELECT distinct t FROM Team t")})
public class Team implements Comparable<Team> {
public static final String FIND_ALL_TEAMS = "Team.findAll";
//Fields
@Id
private String name;
private String description;
//Relationships
@OneToMany(mappedBy = "team")
private List<Player> players;
@ManyToMany
private List<Division> divisionHistory;
@OneToMany(mappedBy="homeTeam")
private List<GameSeries> homeSeries;
@OneToMany(mappedBy="awayTeam")
private List<GameSeries> awaySeries;
...
...
@Override
public boolean equals(Object obj) {
if(obj instanceof Team)
return name.equals(((Team) obj).name)? true:false;
return false;
}
@Override
public int hashCode() {
return name.hashCode();
}
}
ゲームシリーズ.java
@Entity
public class GameSeries {
public static final int NUMBER_OF_GAMES = 5;
// Fields
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(nullable = false)
private Timestamp playDate;
// Relationships
@OneToMany(mappedBy = "series")
private List<Game> games;
@ManyToOne
private Division division;
@ManyToOne
private Team homeTeam;
@ManyToOne
private Team awayTeam;
@Override
public boolean equals(Object obj) {
if (obj instanceof GameSeries)
return playDate.equals(((GameSeries) obj).playDate)
&& homeTeam.equals(((GameSeries) obj).homeTeam)
&& awayTeam.equals(((GameSeries) obj).awayTeam)
? true : false;
return false;
}
@Override
public int hashCode() {
return playDate.hashCode() + 2*homeTeam.hashCode() + awayTeam.hashCode();
}
}
対応するテーブルは次のようになります。
ゲームシリーズ
idプリム
プレイ日
awayTeam_name MUL
Division_id MUL
homeTeam_name MUL
チーム
名前 プリム
説明
これは解決するのが非常に簡単な問題だと思いますが、JPA/EJB は初めてなので、これを理解することはできません。