Querydsl/MySQL上的Count(*)(星号)?

mas*_*asa 3 java mysql querydsl

最初的功能MySQL查询,列出所有列出标签的所有提供商:

SELECT * FROM provider
  INNER JOIN provider_tag
  ON provider_tag.provider_id = provider.id AND provider_tag.tag_id in (1, 2)
  GROUP BY (provider.id)
  HAVING COUNT(*) = 2
Run Code Online (Sandbox Code Playgroud)

在Querydsl中转换为MySQLQuery非常简单......

MySQLQuery query = new MySQLQuery(conn, dialect);

List<Integer> tagIds = ...;

query.from(provider)
    .innerJoin(provider_tag)
    .on(providerTag.providerId.eq(provider.id), providerTag.tagId.in(tagIds))
    .groupBy(provider.id)
    .having(???);
Run Code Online (Sandbox Code Playgroud)

......除了条件having.

如何添加COUNT(*)到查询?

在蒂莫的第一次修正提案后编辑:

所以,查询看起来像这样:

SearchResults<Tuple> result = query.from(provider)
    .innerJoin(providerTag)
    .on(providerTag.providerId.eq(provider.id), providerTag.tagId.in(tagIds))
    .groupBy(provider.id)
    .having(Wildcard.count.eq((long) tagIds.size()))
    .listResults(
        provider.id,
        provider.name);
Run Code Online (Sandbox Code Playgroud)

但是,Illegal operation on empty result set如果结果集为空,则会导致SQLException .

我的其他返回空结果集的查询不会导致异常,所以我想我不应该捕获异常,但是有一个问题需要修复?

生成的MySQL工作正常(返回0行),所以问题不存在.

编辑2:

问题在于groupBy().如果应用问题中显示的更正,这似乎有效.

Tim*_*per 7

该querydsl等效COUNT(*)的Wildcard.count.