Уникальный индекс или нарушение первичного ключа Hibernate - PullRequest
0 голосов
/ 12 октября 2018

У меня есть следующие объекты:

@Entity
public class ApplicationUser {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long id;
    private String username;
    private String firstName;
    private String lastName;
    @Length(min = 2, max = 60)
    private String password;
    private Long tsRegistration;
    private Long tslLastLogin;
    private Long bonusCredit;
    private String nationality;
    private String battleTag;
    private Integer mmr;
    private boolean enabled;
    private boolean tokenExpired;
    private String nickname;

    @JsonIgnore
    @ManyToMany
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(
                    name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(
                    name = "role_id", referencedColumnName = "id"))
    private List<Role> roles;

и

@Entity
@Data
public class Match {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long id;


    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany
    public List<ApplicationUser> users;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "tournament_id")
    public Tournament tournament;

    public Integer qualifyingRound;

    public String winner;

    public Match(List<ApplicationUser> users, Tournament tournament, Integer qualifyingRound) {
        this.users = users;
        this.tournament = tournament;
        this.qualifyingRound = qualifyingRound;
        this.winner = null;
    }

Я разрабатываю тест, в котором я пытаюсь генерировать новые матчи в данном турнире для игроков.Когда турниры начинаются, совпадения уже созданы для пользователей, и это работает как исключение.Но когда я генерирую матчи с одними и теми же пользователями, в одном и том же турнире, но в другом квалификационном раунде (поскольку одни и те же пользователи могут играть друг против друга в одном и том же турнире), я получаю

Unique index or primary key violation: "UK_9PXJMR2KVN9AQYI2A0AYB5BSC_INDEX_2 ON PUBLIC.MATCH_USERS(USERS_ID) VALUES (2, 1)"; SQL statement:
insert into match_users (match_id, users_id) values (?, ?) [23505-197]

послевыполняется следующий запрос:

Hibernate: 
    insert 
    into
        match_users
        (match_id, users_id) 
    values
        (?, ?)

Почему это происходит?Разве match_id не должен отличаться от предыдущего, который был вставлен?Это тестовый код, который генерирует ошибку:

    @Test
public void prova(){

    SwissSystemTournament tournament = (SwissSystemTournament) tournamentService.getRepository().save(new SwissSystemTournament("Test tournament", 12,
            "Hearthstone", "image/img2.jpg", "Italy", "3v3", System.currentTimeMillis(), 3));

    List<ApplicationUser> users = new ArrayList<>();

    users.add(new ApplicationUser("testuser000@gmail.com", "AliceF", "AliceL", "sdadasdaddsada",
            "Europe", "TestUser000", roleRepository.findByName("ROLE_USER"), "TestNicktestuser000"));

    users.add(new ApplicationUser("testuser001@gmail.com", "BobF", "BobL", "wqeqweqweeq",
            "Europe", "TestUser001", roleRepository.findByName("ROLE_USER"), "TestNicktestuser001"));

    tournamentService.getRepository().save(tournament);

    userService.getRepository().save(users.get(0));
    userService.getRepository().save(users.get(1));

    Match match1 =new Match(users,tournament,1);
    matchService.getRepository().save(match1).getId();

    Match match2 = new Match(users,tournament,2);
    matchService.getRepository().save(match2).getId();
}

1 Ответ

0 голосов
/ 12 октября 2018

Как сказал rj-hwang, мне пришлось использовать аннотации @ManyToMany для Match.users, поскольку это правильное отношение между пользователями и соответствием.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...