У меня есть следующие 3 объекта: Item
, Warehouse
и ItemWarehouse
, которые имеют item_id
и warehouse_id
.Я установил отношения @OneToMany
и @ManyToOne
для 3 таблиц.Кроме того, я использую мягкое удаление, поэтому у каждой сущности есть @Where(clause = "deleted_flag = 0")
.
. Я написал запрос для извлечения всех элементов, который выглядит следующим образом:
SELECT i FROM Item i
JOIN FETCH i.itemWarehouses iw
JOIN FETCH iw.warehouse
JPQL преобразуется в этуоператор на консоли:
select
// fields
from item item0_
inner join item_warehouse itemwareho1_ on item0_.id=itemwareho1_.item_id and ( itemwareho1_.deleted_flag = 0)
inner join warehouse warehouse2_ on itemwareho1_.warehouse_id=warehouse2_.id
where ( item0_.deleted_flag = 0)
Видно, что первое inner join
и последнее where
предложение содержат deleted_flag = 0
, а второе inner join
- нет.Почему это так?
Мои сущности определены следующим образом
@Entity
@Table(name = "item")
@Where(clause = "deleted_flag = 0")
class Item
@Entity
@Table(name = "item_warehouse",)
@Where(clause = "deleted_flag = 0")
class ItemWarehouse
@Entity
@Table(name = "warehouse")
@Where(clause = "deleted_flag = 0")
class Warehouse