OR 条件在 JPA 查询中无法正常工作

OR condition doesnt work properly in JPA Query

我有以下实体

class ProductUnitOfMessure
@ManyToOne
@JoinColumn(name="PRODUCT_ID")
private Product product;

@ManyToOne
@JoinColumn(name="VARIANT_ID")
private Variant variant;

class Product
@OneToMany(mappedBy = "product", fetch = FetchType.LAZY)
List<Variant> variants;

class Variant
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PRODUCT_ID")
private Product product;

现在当我运行查询

select p 来自 ProductUnitOfMeasures p 其中 p.variant.sku=?1 或 p.product.sku =?1String 类型的 sku)。

它 return 空列表,虽然 有一些按照下面的 ProductUnitOfMessure table ProductUnitOfMeasures

当我仅 运行 select p 来自 ProductUnitOfMeasures p where p.product.sku =?1 我得到了一些值,为什么会发生这种情况 即使我使用 OR 不 AND ?

数据库是oracle

JPA 在指定“.”时强制将内部联接用于引用。默认情况下建立关系。内部联接会自动从结果中排除空值 - 如果您调用 ProductUnitOfMeasures.getVariant().getSku() == youValue,这可能与您想要的内联,因为您不想处理 NPE。如果您希望结果中包含空值,数据库具有所谓的外部连接语义,它允许包含空值的行并仍用于过滤器的其余部分。

类似于:

"select p from ProductUnitOfMeasures p left join p.variant variant left join p.product product where variant.sku = ?1 or product.sku = ?1"

仍将允许具有空变体或空产品引用的 ProductUnitOfMeasures 被考虑,允许您的 ProductUnitOfMeasures 具有空变体但具有与您的过滤器匹配的 product.sku 值仍然被返回。