Повторяющаяся запись при попытке сохранить сущность - PullRequest
0 голосов
/ 11 июля 2019

У меня есть сущность, которая содержит другую сущность в коллекции, которая сама содержит коллекцию сущностей того же класса, например:

@Entity
@Table(name="parents")
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @OneToMany(cascade = CascadeType.ALL)
    private Set<Task> tasks;

    public Parent() {}

    public Parent(Set<Task> tasks) {
        this.tasks = tasks;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Set<Task> getTasks() {
        return tasks;
    }

    public void setTasks(Set<Task> tasks) {
        this.tasks = tasks;
    }

    @Entity
    @Table(name="tasks")
    public static class Task {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "task_id")
        private long id;
        private String name;
        @OneToMany(cascade = CascadeType.ALL)
        private Set<Task> dependencies;

        public Task() {}

        public Task(String name) {
            this.name = name;
            dependencies = new LinkedHashSet<>();
        }

        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Set<Task> getDependencies() {
            return dependencies;
        }

        public void setDependencies(Set<Task> dependencies) {
            this.dependencies = dependencies;
        }
    }
}

Проблема в моем случае заключается в том, что два Task могут ссылаться на один и тот же Task в своих dependencies, и поэтому, когда я пытаюсь сохранить Parent, я получаю org.hibernate.exception.ConstraintViolationException: could not execute statement, а SQL говорит: Duplicate entry '12' for key 'UK_q8xuxyx9iylvc9ddh8fudtlsf'

Как я могу преодолеть эту проблему? Любая помощь приветствуется.

...