Почему delete в Spring Data JPA делает 2 селекта, а потом 2 делита?

Вот пример Dish и Restaurant.

 @Entity
    public class Dish extends AbstractNamedEntity {
        @ManyToOne(fetch = FetchType.LAZY)
        private Restaurant restaurant;
    @ManyToOne(fetch = FetchType.LAZY)
    private User user;
    }


    @Entity
    public class Restaurant extends AbstractNamedEntity {
        @OnDelete(action = OnDeleteAction.CASCADE)
    
        @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL, orphanRemoval = true)
        private List<Dish> dishes;
        @OnDelete(action = OnDeleteAction.CASCADE)
        @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL, orphanRemoval = true)
        private List<Vote> votes;
    }

Когда я пытаюсь удалить dish при помощи стандартного метода Spring Data JPA

   Integer deleteVoteByUserId(int userId);

То ловлю кучу SQL ( Сначала selectvote, потом почему-то 2 раза select restaurant и 2 раза delete ):

  Hibernate: 
      select
        vote0_.id as id1_4_,
        vote0_.restaurant_id as restaura3_4_,
        vote0_.user_id as user_id4_4_,
        vote0_.vote_date as vote_dat2_4_ 
    from
        vote vote0_ 
    left outer join
        user user1_ 
            on vote0_.user_id=user1_.id 
    where
        user1_.id=?
Hibernate: 
    select
        restaurant0_.id as id1_1_0_,
        restaurant0_.name as name2_1_0_,
        restaurant0_.address as address3_1_0_ 
    from
        restaurant restaurant0_ 
    where
        restaurant0_.id=?
Hibernate: 
    select
        restaurant0_.id as id1_1_0_,
        restaurant0_.name as name2_1_0_,
        restaurant0_.address as address3_1_0_ 
    from
        restaurant restaurant0_ 
    where
        restaurant0_.id=?
Hibernate: 
      delete 
    from
        vote 
    where
        id=?
Hibernate: 
    delete 
    from
        vote 
    where
        id=?

Если я заменю стандартный метод на @Query

    @Query("DELETE FROM  Vote v WHERE v.user.id =?1")
Integer deleteVoteByUserId(int userId);

То происходит только один SQL, чего хватает, чтобы удалить и вернуть Integer. Вопрос: Откуда такая разница, почему стандартный метод так криво работает?

Hibernate: 
    delete 
    from
        vote 
    where
        user_id=?

Ответы (0 шт):