Nadmiarowy constraint w bazie w aplikacji do meczów i lig

0

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

2

każdy klub może tylko 1x zagrać? Game ma relacje OneToOne z Club

Koszmar od formatowania poczynając, przez projekt klas (np List<Club> zgaduję ma niby wyrażać lige??? To dlaczego nie stosowna klasa?), projekt klas JPA / Spring - użyty totalnie bez zrozumienia.
Robisz to na oślep, a potem na oślep szukasz lekarstwa np w generowaniu kluczy, co nie może dać pozytywnego rezultatu.

Błagam cię, rozwiaż ten temat najpierw w konsoli, a Spinga nie dotykaj, dopiero jak będziesz naprawdę wdrożony w programowanie

1 użytkowników online, w tym zalogowanych: 0, gości: 1