Repository中MySQL语句Limit语法报错的解决咨询
解决Eclipse中JPA原生SQL的「no viable alternative at input For Limit」错误标记
以下是几种可行的解决办法,按优先级排序:
1. 配置Eclipse的SQL验证方言为MySQL
Eclipse默认的SQL验证器可能未匹配MySQL方言,导致对LIMIT语法识别错误:
- 打开Eclipse偏好设置:
Window > Preferences > Data Management > SQL Development > SQL Validation - 在「Dialect」下拉菜单中选择与你使用的MySQL版本匹配的选项(如
MySQL 8.0) - 点击「Apply」→「OK」,执行
Project > Clean清理项目后查看错误是否消失
2. 关闭单个文件或项目的SQL语法验证
如果不想全局修改验证规则,可以针对目标文件或项目调整:
- 单个文件:右键目标Repository类文件 →
Properties > Validation - 找到「SQL Syntax Validation」,勾选「Override project settings」,将其级别从「Error」改为「Ignore」或「Warning」
- 应用设置后清理项目
3. 调整JPA原生SQL的验证级别
针对JPA原生查询的语法检查,可以单独降低其错误级别:
- 打开偏好设置:
Window > Preferences > JPA > Errors/Warnings - 展开「Queries」分类,找到「Invalid native query syntax」
- 将其级别从「Error」改为「Warning」或「Ignore」,应用后清理项目
4. 优化SQL语句格式(可选)
部分情况下,Eclipse验证器对格式混乱的SQL识别较差,格式化后的语句可能通过验证:
@Query(value = "SELECT sm.* FROM smooch_log_webhook_notification sw " + "INNER JOIN smooch_log_msg sm ON sm.notification_id = sw.notification " + "WHERE sw.id > :idWebhook " + "AND (sw.trigger_message = 'notification:delivery:failure' OR sw.trigger_message = 'notification:delivery:user') " + "AND sm.external_attemps > 0 " + "GROUP BY sm.fk_smooch_active_campaign_id " + "LIMIT :limit", nativeQuery = true) List<SmoochLogMsg> findByCampaignsGroup(@Param("idWebhook") Long idWebhook, @Param("limit") int limit);
内容的提问来源于stack exchange,提问作者sealabr
相关产品推荐
相关产品推荐

