Spring Boot 3仓库查询验证:构造参数不匹配无启动报错
Spring Boot 3 开启JPQL构造函数参数匹配验证
为啥现在不报错了
Spring Boot 3搭配的Hibernate 6.x默认调低了JPQL查询的验证级别,不再主动检查构造函数的参数数量、类型和JPQL语句里的选择列表是否匹配。所以你示例里的JPQL传了3个参数给UserView,但类里只有接收2个参数的构造函数,启动时不会触发报错,只有实际执行这个查询的时候才会抛出异常。
怎么开启验证
要重新启用这种严格校验,在application.properties或application.yml里添加以下配置即可:
application.properties
spring.jpa.properties.hibernate.query.validation.mode=STRICT
application.yml
spring: jpa: properties: hibernate: query: validation: mode: STRICT
开启后的效果
启用该配置后:
- Hibernate会在解析JPQL语句时(应用启动阶段或首次执行查询时),严格校验构造函数的参数数量、类型是否与JPQL中的选择列表匹配
- 你示例中的错误会直接抛出类似
org.hibernate.query.SemanticException: Unable to locate appropriate constructor on class [test.UserView]的异常,能帮你在开发阶段及时发现问题
如果希望在应用启动时就完成所有JPQL查询的解析和验证(而非延迟到首次执行),保持Spring Data JPA仓库的启动模式为默认的default即可,这也是Spring Boot的默认配置,无需额外修改。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

