2012-06-09 2 views
0

Я пытаюсь удалить дочернюю запись, когда родитель удален. В родительской таблице нет столбца, который ссылается на дочерний элемент. Ребенок ссылается на родителя в индивидуальной необязательной связи.Как удалить ребенка в спящем режиме, когда отношения от ребенка к родительскому

Когда родитель удаляется, возникает ограничение, связанное с тем, что отношение факта все еще существует. Если я добавлю отношение set к дочерней стороне, это не поможет. Hibernate не удаляет дочернюю запись, так как я предполагаю, дочерняя запись никогда не извлекалась.

Есть ли способ удалить детские рекорды, не выполняя его в перехватчике? Благодарю.

+0

он должен работать с привязкой onetoone от родителя к ребенку, но я никогда не тестировал его. – Firo

ответ

2

Я приведу пример аналогичной ситуации, применив к которой ситуация решит проблему.

Предположим, что Employee имеет идентификатор Department_ID в своей таблице, а Department не имеет столбца, ссылающегося на Employee_ID.

Мы связываем сотрудника с отделом, используя колонку join. Таким образом, мы получаем однонаправленную связь.

public class Employee { 

    @OneToOne 
    @JoinColumn(name = "DEPARTMENT_ID") 
    private Department department; 
} 

Далее мы связываем отдел с работником, пометив ассоциации с mappedBy атрибутом. Он ссылается на поле собственности ассоциации на стороне Сотрудника. Таким образом, мы получаем двунаправленную связь.

public class Department { 

    @OneToOne(mappedBy = "department", cascade = CascadeType.ALL) 
    private Employee employee; 
} 

Маркировка ассоциация с CascadeType.ALL будет включать в себя CascadeType.REMOVE, который будет каскад работника на операции удаления. Теперь, удалив отдел, удалит сотрудника вместе с ним.

+0

Я ленив. У меня есть файлы hbm.xml. Это можно сделать с помощью hbm.xml? Я не уверен, какой точный эквивалент mappedBy. –

+0

Я думаю, что это атрибут inverse = "true" для элемента «один-к-одному», но не уверен, однако, попробуйте просмотреть DTD. – JMelnik

+0

@JMelnik есть что-нибудь еще, потому что у меня такая же проблема, и я следил за вашим решением, но это работает для меня. – Sikorski

Смежные вопросы