OrphanRemoval в спящем режиме не работает при многоуровневых связывающих отношениях - PullRequest
0 голосов
/ 01 октября 2019

У меня есть структура таблицы с многоуровневыми связанными отношениями, например, у Parent есть отношения один-ко-многим с Child, а у Child есть отношения один-ко-многим с ChildL2. Я установил orphanRemoval свойство true для всех соединений oneToMany.

@Entity
@Table(name = "parent")
public class Parent {

    //other columns, getters & setters

    @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
    @Fetch(value = FetchMode.SUBSELECT)
    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.ALL})
    @JoinColumn(name = "RefId", referencedColumnName = "id")
    private List<Child> child;
}

@Entity
@Table(name = "child")
public class Child {

    //other columns, getters & setters

    @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
    @Fetch(value = FetchMode.SUBSELECT)
    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.ALL})
    @JoinColumn(name = "RefId", referencedColumnName = "id")
    private List<ChildL2> childL2;
}

@Entity
@Table(name = "childl2")
public class ChildL2 {

    //other columns , getters & setters
}

Но когда я пытаюсь удалить «parent» с помощью следующего кода, соответствующие строки «child» удаляются успешно. Но связанные строки 'childl2' все еще остаются.

Parent tempObj = new Parent();
tempObj.setId(36790);
session.delete(tempObj);

Q: 1 Мне нужно знать, способно ли свойство hibernate orphanRemoval работать с многоуровневыми связанными отношениями oneToMany?

Q2 Когда я пытаюсь загрузить по id с помощью CriteriaQuery.list(), это отнимает много времени. Мне нужно знать, есть ли способ оптимизировать его без изменения на FetchType.Lazy?

Criteria queryCriteria = session.createCriteria(Parent.class);
queryCriteria.add(Restrictions.eq("Id", 36795));
List<Parent> dataList = queryCriteria.list();

Заранее спасибо.

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