JOIN FETCH 中缺少 Hibernate @Where 子句

问题描述 投票:0回答:1

我有以下3个实体:

Item
Warehouse
ItemWarehouse
,其中有
item_id
warehouse_id
。我已经在 3 个表上设置了
@OneToMany
@ManyToOne
关系。另外,我使用软删除,所以每个实体都有
@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
sql hibernate jpql
1个回答
0
投票

我也遇到了这个问题。事实证明,这是一个 hibernate 6.x 的 bug,已在 6.2.0.CR4 版本中修复;请参阅 Hibernate 票证 @跨关联边界应用不一致的地方

© www.soinside.com 2019 - 2024. All rights reserved.