Ответ 1
Каскадирование имеет смысл только для переходов состояния сущности, которые распространяются от Родителя к Дочернему. В вашем случае Родитель был фактически ребенком этой ассоциации (имея ФК).
Попробуйте использовать это сопоставление:
@Entity
public class Parent {
...
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent")
private Child child;
...
}
@Entity
public class Child {
@OneToOne
@JoinColumn(name = "parent_id")
private Parent parent;
...
@Lob
private byte[] data;
...
}
И для каскадного удаления сирот теперь необходимо:
Parent parent = ...;
parent.getChild().setParent(null);
parent.setChild(null);
Или, что еще лучше, используйте методы addChild/removeChild в классе Parent
объекта:
public void addChild(Child child) {
children.add(child);
child.setParent(this);
}
public void removeChild(Child child) {
children.remove(child);
child.setParent(null);
}
Для более подробной информации, проверьте эту статью.