У меня есть объект, который содержит коллекцию другого объекта, который сам ссылается на тот же класс в коллекции, со следующими сопоставлениями:
@Entity
@Table(name="parents")
public class Parent {
@Id
@GeneratedValue
private long id;
@ElementCollection
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<Child> children;
public Parent() {}
public Parent(Set<Child> children) {
this.children = children;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Set<Child> getChildren() {
return children;
}
public void setChildren(Set<Child> children) {
this.children = children;
}
@Entity
@Table(name="children")
public static class Child {
@Id
@GeneratedValue
private long id;
private String name;
@ElementCollection
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<Child> dependencies;
public Child() {}
public Child(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 getDependencies() {
return dependencies;
}
public setDependencies(Set<Child> dependencies) {
this.dependencies = dependencies;
}
}
}
Но когда я пытаюсь сохранить его, я получаю:java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing
исключение
Я прочитал в другом посте, что я должен использовать аннотацию @Cascade(CascadeType.ALL)
, но, как вы видите, я пытался это сделать, и это не решило мою проблему.
Пожалуйста, помогите мне понять, что не так с этими отображениями