Hibernate: сохранить ребенка ребенка при сохранении родителя - PullRequest
0 голосов
/ 25 октября 2018

Я новичок в Hibernate, и у меня есть следующий вопрос:

Говоря, у меня есть следующий сценарий:

       @Entity
       public class Parent(){
            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            @Column(name = "PID")
            private Long id;

            @OneToOne(mappedBy = "Parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
            private Child child;
       }

       @Entity
       public class Child()implements Serializable {

            @Id
            private Long id;

            @OneToMany(
                mappedBy = "child",
                cascade = {CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE},
                orphanRemoval = true
            )
            private List<Grandchild> grandchilds;

            @OneToOne(fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.REMOVE)
            @MapsId()
            @JoinColumn(name = "PID")
            @Cascade(org.hibernate.annotations.CascadeType.DELETE)
            private Parent parent;
       }

       @Entity
       @IdClass(GrandchildID.class)
       public class Grandchild {

            @Id
            @Column(name = "AID")
            private Long aid;

            @Id
            @Column(name = "GID")
            @GeneratedValue(strategy = GenerationType.AUTO)
            private Long gid;

            @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE})
            @JoinColumn(name = "AID")
            @MapsId("AID")
            private Child child;
      }

У меня есть вопрос:

Iзнаю, что hibernate может сохранить каскад данных.

Так что я могу сделать следующее:

for each grandchild{
     grandchild.setChild(child);
}

child.setGrandChilds = (grandchilds);

child = childRepository.save(child);//which will save both child and grandchild.

parent.setChild(child);

parentRepository.save(parent)//which will save parent

Мой вопрос:

Зачем мне сначала сохранять ребенка?

С этой целью, поскольку спасение ребенка также автоматически спасет внука для меня, похоже, что Hibernate может сохранить оба для меня.Итак, почему я не могу просто сохранить родителя, чтобы в спящем режиме я мог автоматически сохранить ребенка и внука?Спящий режим только автосохранение только для ребенка (не для внука)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...