JPA сопоставление с коллекцией объектов того же класса - PullRequest
0 голосов
/ 11 июля 2019

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

@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), но, как вы видите, я пытался это сделать, и это не решило мою проблему.

Пожалуйста, помогите мне понять, что не так с этими отображениями

...