У меня есть структура таблицы с многоуровневыми связанными отношениями, например, у 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();
Заранее спасибо.