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

Hibernate映射LocalDate到SQL Date时出现Undefined filter parameter报错

报错原因

该报错核心是Hibernate无法匹配过滤器参数的类型定义,具体诱因有两个:

  1. @ParamDef中定义的type="date"默认映射的是java.sql.Date类型,而非你传入的java.time.LocalDate类型。即使Hibernate 5.5支持Java 8时间API,你没有显式指定参数类型为LocalDate的情况下,Hibernate会认为传入的参数类型和定义不匹配,进而抛出参数未定义的异常。
  2. 小概率为你的实体类没有被Hibernate正确扫描到,@FilterDefs的配置未生效。

解决方案

按优先级依次尝试以下操作:

  1. 修改过滤器参数的类型定义
    将@FilterDef中两个日期相关参数的type从date改为LocalDate(Hibernate内置的Java 8时间类型别名),修改后的代码如下:
@FilterDefs({
        @FilterDef(name="priceFilter", parameters=@ParamDef(name="priceComparison",type="double")),
        @FilterDef(name="beforeDateFilter", parameters=@ParamDef(name="beforeDateLocal", type="LocalDate")),
        @FilterDef(name="afterDateFilter", parameters=@ParamDef(name="afterDateLocal", type="LocalDate"))
})

如果修改后仍报错,可以替换为全限定类名:type = "java.time.LocalDate"。

  1. 检查实体类配置
    确认你的listing实体类上的@Entity注解生效,项目的Hibernate包扫描路径包含该实体类所在的包,避免过滤器配置未被加载。

  2. (可选不推荐)适配旧类型定义
    如果你不想修改过滤器配置,可以将传入的LocalDate转换为java.sql.Date再设置参数:

afterDateFilter.setParameter("afterDateLocal", java.sql.Date.valueOf(afterDateLocal));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:45:04