我坚持如何在SQL上使用Querydsl从子查询中进行选择。代码编译得很好,但我得到了运行时异常:Undeclared path 'cases'. Add this path as a source to the query to be able to reference it.
代码看起来大致如下:
private ListSubQuery<Integer> getStudyCaseSubQuery(CaseQuery query) {
SQLSubQuery sq = new SQLSubQuery().from(cases);
... stuff happens
return sq.list(cases.id);
}
...
public List<JsonObject> getData(...) {
// Build a common subquery for a bunch of other queries
ListSubQuery<Integer> caseQuery = getStudyCaseSubQuery(...);
// This fails with runtime exception
List<Integer> caseIds = caseQuery.list(Expressions.path(Integer.class, cases, "id"));
}
我可以看到问题出在哪里:除了整个表格之外,我找不到为子查询指定别名的方法,这不是这里的情况。有许多使用Alias
和Path
的示例,但在我可以适应此问题的测试或教程中没有任何匹配。虽然我非常了解SQL,但Querydsl中的表和列的别名显得完全不同,但我发现的例子并没有真正详细说明差异,所以澄清会非常有用。