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

升级至Spring Boot 3.3.0后Spring Data JPA校验失败

Spring Boot 3.3.0升级后JPA查询构造函数匹配失败

将Spring Boot从3.2.3版本升级至3.3.0版本后,原本正常运行的JPA查询出现了校验错误。

定义的Summary记录

public record Summary(
    long productionRunId, long productId, String productLengthName, long count, double volume) { }

对应的JPA查询方法

@Query(
    """
    SELECT new com.example.Summary(
      t.productionRun.id,
      t.product.id,
      t.productLengthName,
      COUNT(*),
      SUM(t.volume)
    )
    FROM Tag t
    GROUP BY t.productionRun.id, t.product.id, t.productLengthName
    """
)
List<Summary> getSummaries();

报错信息

Caused by: org.hibernate.query.SemanticException: Missing constructor for type 'Summary'
    at app//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitInstantiation(SemanticQueryBuilder.java:1506)
    at app//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitInstantiation(SemanticQueryBuilder.java:275)
    at app//org.hibernate.grammars.hql.HqlParser$InstantiationContext.accept(HqlParser.java:4029)
    at app//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelectableNode(SemanticQueryBuilder.java:1453)
    at app//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelection(SemanticQueryBuilder.java:1407)

调试细节

调试发现问题出在SemanticQueryBuilder.visitInstantiationArgument方法中:该方法将Summary.productionRunId的nodeJavaType识别为Void,但实际类型应为long。这导致Hibernate无法找到匹配的构造函数,奇怪的是其余4个构造函数参数的类型识别都是正确的。调试截图显示,第一个参数的类型被错误标记为Void,其余参数类型均匹配正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:00:19