cześć, mam klasę Liga do do której zapisuję zestaw meczów tj. 7 kolejek, a dla każdej 4 mecze. Mecz tez jest klasą
podczas iterowania kolejki pierwszej ( i =0), nie ma żadnego problemu i do repo zapisuje 4 mecze. jednak przy drugiej iteracji wykrzacza mi się przy próbie zapisu i wyświetla wyjątek:
could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_SSGV1PH34O6RWCRHU5AKDRNHB_INDEX_E ON PUBLIC.GAME_GAME_CLUBS(GAME_CLUBS_CLUB_ID) VALUES 1"; SQL statement: insert into game_game_clubs (game_id, game_clubs_club_id) values (?, ?) [23505-200]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_SSGV1PH34O6RWCRHU5AKDRNHB_INDEX_E ON PUBLIC.GAME_GAME_CLUBS(GAME_CLUBS_CLUB_ID) VALUES 1";
klasy:
@Entity
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany
private List<Club> gameClubs;
@OneToOne
private Club hostClub;
@OneToOne
private Club guestClub;
private int hostScore;
private int guestScore;
private boolean isPenaltyScore;
private boolean inProgress;
private GameType gameType;
private long leagueId;
//all setters and getters and toString
public Game() {
}
public Game(Club hostClub, Club guestClub, GameType gameType, long leagueId){
this.hostClub=hostClub;
this.guestClub=guestClub;
this.gameType=gameType;
this.leagueId=leagueId;
}
public Game(List<Club> gameClubs, boolean inProgress) {
this.gameClubs = gameClubs;
this.inProgress = inProgress;
}
}
oraz druga:
@Data
@Setter(value = AccessLevel.NONE)
@Entity
public class League {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String leagueNumber;
@ElementCollection
private final List<Integer> leagueRound = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7));
@OneToMany
private List<Club> leagueTeams;
@OneToMany(cascade = {CascadeType.ALL})
private List<Game> leagueAllGames;
public League() {
}
public League(String leagueNumber, List<Club> leagueTeams) {
this.leagueNumber = leagueNumber;
this.leagueTeams = leagueTeams;
}
public List<Club> getLeagueTeams() {
return leagueTeams;
}
public void setLeagueNumber(String leagueNumber) {
this.leagueNumber = leagueNumber;
}
public void setLeagueTeams(List<Club> leagueTeams) {
this.leagueTeams = leagueTeams;
}
public List<Integer> getLeagueRound() {
return leagueRound;
}
public List<Game> getLeagueAllGames() {
return leagueAllGames;
}
public void setLeagueAllGames(List<Game> leagueAllGames) {
this.leagueAllGames = leagueAllGames;
}
@Override
public String toString() {
return
"League Id:"+id ;
}
}
i część Service'u:
@Service
public void createGamesFixtures(long leagueId) {
League league=this.leagueRepository.findAllById(leagueId);
List<Club> clubsList = this.clubRepository.findByClubLeagueId(leagueId);
Club clubA = clubsList.get(0);
Club clubB = clubsList.get(1);
Club clubC = clubsList.get(2);
Club clubD = clubsList.get(3);
Club clubE = clubsList.get(4);
Club clubF = clubsList.get(5);
Club clubG = clubsList.get(6);
Club clubH = clubsList.get(7);
Game[][] leagueFixtures = {
{new Game(clubA, clubH, GameType.LG, leagueId),
new Game(clubB, clubG, GameType.LG, leagueId),
new Game(clubC, clubF, GameType.LG, leagueId),
new Game(clubD, clubE, GameType.LG, leagueId)},
{new Game(clubA, clubG, GameType.LG, leagueId),
new Game(clubH, clubF, GameType.LG, leagueId),
new Game(clubB, clubE, GameType.LG, leagueId),
new Game(clubC, clubD, GameType.LG, leagueId)},
{new Game(clubA, clubF, GameType.LG, leagueId),
new Game(clubG, clubE, GameType.LG, leagueId),
new Game(clubH, clubD, GameType.LG, leagueId),
new Game(clubB, clubC, GameType.LG, leagueId)},
{new Game(clubA, clubE, GameType.LG, leagueId),
new Game(clubF, clubD, GameType.LG, leagueId),
new Game(clubG, clubC, GameType.LG, leagueId),
new Game(clubH, clubB, GameType.LG, leagueId)},
{new Game(clubA, clubD, GameType.LG, leagueId),
new Game(clubE, clubC, GameType.LG, leagueId),
new Game(clubF, clubB, GameType.LG, leagueId),
new Game(clubG, clubH, GameType.LG, leagueId)},
{new Game(clubA, clubC, GameType.LG, leagueId),
new Game(clubD, clubB, GameType.LG, leagueId),
new Game(clubE, clubH, GameType.LG, leagueId),
new Game(clubF, clubG, GameType.LG, leagueId)},
{new Game(clubA, clubB, GameType.LG, leagueId),
new Game(clubC, clubH, GameType.LG, leagueId),
new Game(clubD, clubG, GameType.LG, leagueId),
new Game(clubE, clubF, GameType.LG, leagueId)}
};
List<Game> leagueAllGames = new ArrayList<>();
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 4; j++) {
List<Club> gameClubs=new ArrayList<>();
gameClubs.add(leagueFixtures[i][j].getHostClub());
gameClubs.add(leagueFixtures[i][j].getGuestClub());
Game game =leagueFixtures[i][j];
game.setGameClubs(gameClubs);
this.gameRepository.save(game);
leagueAllGames.add(game);
league.setLeagueAllGames(leagueAllGames);
this.leagueRepository.save(league);
}
}
}
próbowałem zmienić w klasach @GeneratedValue(strategy = GenerationType.AUTO)
na IDENTITY
, niestety bez zmian