У меня есть сущность, которая содержит другую сущность в коллекции, которая сама содержит коллекцию сущностей того же класса, например:
@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'
Как я могу преодолеть эту проблему? Любая помощь приветствуется.