Удаление объекта из БД

144
02 февраля 2018, 21:25

Есть 3 класса:

@Entity
public class А {
    ...  
    @OneToMany(mappedBy = "а", cascade = CascadeType.ALL,
     orphanRemoval = true, fetch = FetchType.EAGER)
    private Set<В> bObj = new HashSet<B>();
    ...  
}  
@Entity
public class B {
    @Column(name = "amount", nullable = false)
    private Integer amount;
    @ManyToOne
    @JoinColumn(name = "a_id", nullable = false)
    private A a;
    @ManyToOne
    @JoinColumn(name = "c_id", nullable = false)
    private C c;
}  
@Entity
public class C {
    ...  
    @OneToMany(mappedBy = "c", fetch = FetchType.LAZY)
    private Set<В> bObj = new HashSet<B>();  
    ...  
}  

Я не понимаю, как настроить связь @OneToMany, что бы при удалении объекта класса А удалялись все связанные с ним объекты класса В?
Что-то я запутался...
Кидает ошибки:

[ERROR] (DAO-слой класса А.java:33) - Ошибка при удалении. id = 5
org.hibernate.exception.ConstraintViolationException: could not execute statement  

и

        Caused by:  
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:  
        Cannot delete or update a parent row:  
        a foreign key constraint fails (`таблица В`, CONSTRAINT  
    `FK_bbpbxkkfko0nwn5uleye8org4` FOREIGN KEY (`а_id`) REFERENCES `таблица С)  

Часть кода убрана, названия поменял для простоты.
З.Ы. Как вариант удалять объекты класса В по списку который мы получаем от А, и потом удалять А... но может есть решение проще с правильной настройкой?

Ага, понятно. Тогда вопрос в другом, почему hibernate не создает(и не обновляет) схему с ON DELETE CASCADE если я для него всё сделал:

    @ManyToOne
    @JoinColumn(name = "а_id", nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)<---
    private А а;  

Руками я поправлю, но всё же...

READ ALSO
Тернарный оператор вместо конструкции if-else

Тернарный оператор вместо конструкции if-else

Можно ли улучшить(упростить) данную конструкцию тернарным оператором?

153
Потоковая модель в NIO2

Потоковая модель в NIO2

Расскажите пожалуйста, как реализована потоковая модель в NIO2? Правильно ли я понимаю, что при инициализации (или первом установке Callback) создается...

155
Как получить Public ECDSA Key из Private ECDSA Key на Java

Как получить Public ECDSA Key из Private ECDSA Key на Java

Подскажите пожалуйста как получить Public ECDSA Key из Private ECDSA Key на Java AndroidИспользую org

158
Как сделать переинициализацию Swiper внутри Magnific Popup?

Как сделать переинициализацию Swiper внутри Magnific Popup?

ЗдравствуйтеИмеется галерея модальных окон Magnific Popup

189