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

Java 21+QueryDSL 5.1.0含验证注解的@MappedSuperclass元模型生成失败

QueryDSL元模型生成失败:泛型参数前的空格引发匹配错误

使用的技术栈:

  • Java 21(OpenJDK Runtime Environment build 21.0.8+9)
  • Maven 3.9.10
  • Jakarta Persistence 3.1.0
  • Jakarta Annotation 2.1.1
  • QueryDSL 5.1.0(querydsl-apt、querydsl-jpa)
  • Hibernate Validator 8.0.2.Final

定义带验证注解的@MappedSuperclass父类:

import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import jakarta.validation.constraints.NotNull;

@MappedSuperclass
public abstract class AbstractMappedSuperclass<T> {

    @Id
    private Long id;

    @NotNull
    private T something;

}

继承父类的实体类:

import jakarta.persistence.Entity;

@Entity
public class Ent extends AbstractMappedSuperclass<String> {
}

执行以下Maven命令生成元模型:

mvn -X -P METAMODEL clean compile

生成时抛出的错误:

Caused by: java.lang.IllegalStateException: Did not find type  T in AbstractMappedSuperclass<?> for Ent
    at com.querydsl.codegen.TypeResolver.resolveVar (TypeResolver.java:74)
    at com.querydsl.codegen.TypeResolver.resolve (TypeResolver.java:45)
    at com.querydsl.codegen.Property.createCopy (Property.java:92)
    at com.querydsl.codegen.EntityType.include (EntityType.java:262)
    at com.querydsl.apt.AbstractQuerydslProcessor.addSupertypeFields (AbstractQuerydslProcessor.java:416)

关键问题分析:
错误信息中泛型参数T前存在空格(显示为" T")。调试发现,当保留@NotNull等验证注解时,com.querydsl.codegen.TypeResolver.resolveVar方法内,getVarName(param)返回值为" T",而预期的varName是"T",导致字符串匹配失败;移除验证注解后,元模型可正常生成。

疑问:
这是配置错误,还是Hibernate Validator 8.0.2.Final、OpenJDK 21.0.8+9或QueryDSL存在bug?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:25:08