Hibernate каскадное удаление с несколькими уровнями - PullRequest
0 голосов
/ 06 марта 2020

к сожалению, я не смог найти решение для моей текущей проблемы. (Пожалуйста, опубликуйте ссылку, если я что-то пропустил)

У меня есть многослойная структура объекта следующим образом

class Parent {

    @OneToMany(
            mappedBy = "parent",
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    private Set<ChildA> setOfChildA = new HashSet<>();

    @OneToMany( fetch = FetchType.EAGER, mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true )
    private Set<ChildB> setOfChildB = new HashSet<>();
}

class ChildB {
    @OneToMany( fetch = FetchType.LAZY, mappedBy = "childb", cascade = CascadeType.ALL, orphanRemoval = true )
    private Set<grandchild> grandchild = new HashSet<>();
}

Когда я добавляю Parent.setOfChildA и добавляю ChildB.grandchild и только сохраняю Родительский объект все работает нормально.

Но когда я удаляю Parent.setOfChildA и удаляю некоторые из ChildB.grandchild, я получаю следующее исключение

.m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.orm.jpa.JpaSystemException: Batch update returned unexpected row count from update [0]; actual row count: 2; expected: 1; nested exception is org.hibernate.jdbc.BatchedTooManyRowsAffectedException: Batch update returned unexpected row count from update [0]; actual row count: 2; expected: 1]

Hibernate регистрирует следующее sql операторы

delete 
        from
            tbl_childa
        where
            childa_linkparentid=? 
            and childa_linkotherentityid=?
delete 
        from
            tbl_grandchild
        where
            grandchild_id=? 
            and grandchild_version=?

Кто-нибудь знает, почему добавление работает, а удаление вызывает исключение?

Вам нужна дополнительная информация о коде?

1 Ответ

0 голосов
/ 06 марта 2020

Nevermind ... ошибка была вызвана поврежденными данными ...

...