所以我有一个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规范将其转换为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放在泛型中,因为我的结果是任意的。
1条答案
按热度按时间w9apscun1#
你可以用
nativeQuery = true parameter to the @Query
.如果你不加上
nativeQuery = true
参数@Query
在spring存储库中,查询将被认为是用jpql编写的。在jpql中,您可以在这里查看:
子查询可以用在where或having子句中。
所以添加natuvequery属性
true
价值观。它会帮助你的。