【发布时间】:2020-08-21 09:28:06
【问题描述】:
所以我有一个类似的 SQL 查询:
SELECT stuff
FROM a
JOIN x ON a.id = x.a_id
JOIN (SELECT ... FROM a join b ON ...) as foo
WHERE foo.c = 'bar'
AND foo.d = true
AND ...
虽然我想使用例如 Spring Specifications 将其转换为 Java 代码。我知道一般如何使用它们,但我读过,例如,子查询只允许在 WHERE 部分中使用?对吗?
但是:我将如何在规范中进行 SQL 查询?到目前为止,我已经使用了一个特殊的规范类,我在其中执行以下操作:
public static Specification<Foo> hasStuff(long stuffId) {
return (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get(Foo_.stuff), stuffId);
}
但这不适用于更复杂的情况,对吧?因为如果我用
foo.c = 'bar'
和
foo.d = true
进入不同的方法,我会做两次加入,对吧?
编辑:哦,对了,还有一件重要的事情。如果我想汇总 WHERE 的所有检查,我该怎么做?以前我只是创建了一个List<Specification<SomeClass>>,但由于我现在需要使用连接,所以我不能只将 SomeClass 放在泛型中,因为我的结果将是任意的。
【问题讨论】:
标签: java spring-boot jpa criteria specifications