27
Апр
2021

ManyToMany в Hibernate пытается добавить существующую запись

Столкнулся с такой проблемой. Есть таблицы User и Project, которые связаны при помощи @ManyToMany через отдельную таблицу

User

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
        name = "user_project",
        joinColumns = {@JoinColumn(name = "user_id")},
        inverseJoinColumns = {@JoinColumn(name = "project_id")}
)
private Set<Project> projects = new HashSet<>();

Project

@ManyToMany(mappedBy = "projects", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<User> users = new HashSet<>();

addProject

public void addProject(User user, String name, String text) {

    Project project = new Project(user, name, text);
    projectRepo.save(project);

    Set<Project> projects = user.getProjects();
    projects.add(project);

    user.setProjects(projects);
    //System.out.println(user.getProjects());
    userRepo.save(user);

}

Но есть такая проблема. При одиночном вызове метода addProject, добавляющего проект к юзеру, все срабатывает нормально. Но при последующем вызове метода проект корректно добавляется в таблицу с проектами, но при добавлении в таблицу для связи Hibernate пытается добавить юзеру id предыдущего, а не текущего проекта. В итоге выходит ошибка

org.postgresql.util.PSQLException: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "user_project_pkey" Подробности: Ключ "(project_id, user_id)=(29, 1)" уже существует.

Не понимаю, в чем я ошибся

Источник: https://ru.stackoverflow.com/questions/1275301/manytomany-%D0%B2-hibernate-%D0%BF%D1%8B%D1%82%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%89%D1%83%D1%8E-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C

Тебе может это понравится...

Добавить комментарий