Почему 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=?