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

@Query关联查询时出现Java报错:annotation values must be of the form 'name=value'

问题原因及解决方法

错误根源

你遇到的java: annotation values must be of the form 'name=value'本质是SQL语法错误导致注解解析异常,具体问题有三点:

  1. 子查询未指定别名:SQL中用子查询作为JOIN的关联表时,必须给子查询分配别名,否则数据库无法识别这个临时表。
  2. JOIN关联条件写法错误:你把关联条件写在了子查询的WHERE里,不符合JOIN的标准语法,会导致逻辑混乱。
  3. 查询字段范围不当:SELECT *会同时返回两张表的字段,无法正确映射到ConnectionRequest对象。

修正后的代码

@Query("SELECT c.* FROM ConnectionRequest c " +
        "INNER JOIN (SELECT id, firstName as name FROM USER u) u_sub " +
        "ON c.userId = u_sub.id " +
        "WHERE c.dateTimeCompleted IS NULL", nativeQuery = true)
List<ConnectionRequest> findAllByDateTimeCompletedIsNull();

关键修改点

  • 给子查询添加别名u_sub,满足SQL语法要求。
  • 将关联条件c.userId = u.id移到ON子句中,这是JOIN的标准写法,逻辑更清晰。
  • 把SELECT *改为SELECT c.*,只查询ConnectionRequest表的字段,确保能正确映射到实体类。
  • 子查询中显式包含id字段,保证能和ConnectionRequest的userId关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:15:29