0 或product_verified = false)且 sku =“12345”; 以下是我的代码,但我得到了-6ren">
gpt4 book ai didi

java - 如何使用规范在mysql查询中使用多个 "OR"条件创建两个 "AND"条件

转载 作者:行者123 更新时间:2023-12-02 10:52:08 28 4
gpt4 key购买 nike

我想在规范的帮助下进行以下查询

从表中选择*,其中(order_quantity > 0 或product_verified = false)且 sku =“12345”;

以下是我的代码,但我得到了错误的结果集

Specification<JitOrderItem> specification = JitOrderItemSpecification.findAll();

specification = Specifications.where(specification).and(
Specifications.where(specification).or(JitOrderItemSpecification.filterByJitOrderQuantityGreaterThan(0))
.or(Specifications.where(specification).and(JitOrderItemSpecification.filterByProductVerified(false)))

);
specification = Specifications.where(specification).and(JitOrderItemSpecification.filterBySku(sku));

最佳答案

我假设您正在使用 JPA,可能是 hibernate。您可以启用日志记录(对于 hibernate,它是“org.hibernate.sql”来调试)。这样您就可以看到生成的查询,这可能会帮助您自己调试这些查询。

查看您的代码,您的最终规范将如下所示:

Specifications.where(
Specifications.where(JitOrderItemSpecification.findAll())
.and(
Specifications.where(JitOrderItemSpecification.findAll())
.or(JitOrderItemSpecification.filterByJitOrderQuantityGreaterThan(0))
.or(Specifications.where(JitOrderItemSpecification.findAll()).and(JitOrderItemSpecification.filterByProductVerified(false)))
)
)
.and(JitOrderItemSpecification.filterBySku(sku));

您基本上查询以下内容(仅 WHERE 子句):

(
ALL JitOrderItems
AND
(
ALL JitOrderItems
OR
OrderQuantityGreaterThan 0
OR
(
ALL JitOrderItems
AND
ProductVerified false
)
)
)
AND
JitOrderItemSpec.filterBySku(sku)

您想要的可能是以下内容:

Specifications.where(
JitOrderItemSpecification.filterByJitOrderQuantityGreaterThan(0).or(JitOrderItemSpecification.filterByProductVerified(false)))
.and(JitOrderItemSpecification.filterBySku(sku));

关于java - 如何使用规范在mysql查询中使用多个 "OR"条件创建两个 "AND"条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088960/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com