You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data JPA查询唯一Slocation时遇QuerySyntaxException错误求助

解决HQL QuerySyntaxException: unexpected token: distinct的问题

哎,这个错误我之前也踩过坑!问题出在你HQL语句里distinct的位置不对——HQL不允许把distinct直接放在new map()的构造参数里,它得放在select和new map()之间才行。

另外还有个容易忽略的小问题:你现在方法返回的是Set<Account>,但你的查询实际返回的是map对象,这类型完全不匹配,后续执行肯定还会出类型转换错误,得一起改了。

给你修正后的代码:

@Repository
public interface AccountRepository extends JpaRepository<Account, Integer>, QueryDslPredicateExecutor<Account> {
    // 加载位置
    @Query("select distinct new map(a.slocation as slocation) from Account a where a.slocation != null")
    Set<Map<String, Object>> findSlocation();
}

关键修改说明:

  • 把distinct移到select和new map()之间,这样HQL就能正确识别去重逻辑,不会再报语法错误
  • 返回类型改成Set<Map<String, Object>>,因为new map(...)返回的是键值对形式的Map对象,不是Account实体

这样修改后,执行查询就能得到唯一的slocation值,每个结果都是一个包含slocation键的Map,后续把这个集合序列化就能得到你想要的键值对格式的JSON了。

内容的提问来源于stack exchange,提问作者SpringUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:14:32