我正在尝试使用条件查询重新创建以下SQL代码段:
SELECT t0.column1,
t0.column2
FROM SALES_TBL t1,
PRD t0
WHERE (t0.column3 = '640420022' OR
t1.column4 = '640420022' OR
t1.column5 = '640420022' OR
t1.column6 = '640420022') AND
t1.column7 = t0.column7
我正在构建一个Predicates列表,其中包含以下内容:
preds.add(cb.or(cb.equal((Expression<?>) rootProd.get("prd"), ic.toUpperCase()),
cb.equal((Expression<?>) rootProd.get("salesTbl").get("upc"), ic),
cb.equal((Expression<?>) rootProd.get("salesTbl").get("salesCd"), ic),
cb.equal((Expression<?>) rootProd.get("salesTbl").get("smisCd"), smis)));
但生成的实际SQL如下所示:
SELECT t0.column1,
t0.column2
FROM SALES_TBL t3,
SALES_TBL t2,
SALES_TBL t1,
PRD t0
WHERE ((((t0.column3 = '640420022') OR
(t1.column4 = '640420022')) OR
(t2.column5 = '640420022')) OR
(t3.column6 = '640420022')) AND
(((t1.column7 = t0.column7) AND
(t2.column7 = t0.column7)) AND
(t3.column7 = t0.column7)))
此查询(显然具有实际列名称)大约需要10分钟才能返回,当它返回时,只有预期为1时有25行。
我是JPA的新手,这个让我发疯。如何让JPA在顶部生成查询而不是生成查询?
我似乎对我开放的唯一其他课程是不让我们使用CriteriaBuilder.or,而是一次构建一个Predicate,并将结果合并到一个List中,我可以将其发送回前端。但这似乎并不合适。
任何帮助将不胜感激。
谢谢,
格雷格