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

JPQL中使用日期字面量报IllegalArgumentException错误是什么原因?

报错原因

  • 你使用的{d '2019-12-31'}属于JDBC专属的日期转义语法,不被JPQL标准语法支持,Hibernate在解析JPQL语句时无法识别未定义的{字符,因此直接抛出字符不合法的异常。

正确的实现方案

  • 方案1:使用JPQL内置的日期函数处理字面量,改写后的语句如下:
SELECT r 
FROM Restaurant r 
LEFT JOIN r.dishes dh ON dh.date = DATE('2019-12-31') 
GROUP BY r
  • 方案2(更推荐):使用参数绑定传入日期,避免硬编码字面量,同时规避SQL注入风险:
    1. 改写JPQL语句为:
    SELECT r FROM Restaurant r LEFT JOIN r.dishes dh ON dh.date = :targetDate GROUP BY r
    
    1. 在业务代码中给参数赋值,示例如下(以Spring Data JPA为例):
    @Query(value = "上面的JPQL语句", nativeQuery = false)
    List<Restaurant> findByDishesDate(@Param("targetDate") LocalDate targetDate);
    
    调用时直接传入LocalDate.of(2019,12,31)即可。

内容的提问来源于stack exchange,提问作者Иван Устинов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:00:00