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

升级至Spring Boot 3.2.1后Dynamic Projections功能失效求助

Spring Boot 3.2.1升级后动态投影方法参数不匹配报错

将项目从Spring Boot 3.2.0升级到3.2.1后无法正常启动,核心错误指向GenericRepository#findProjectedById方法:

提供了至少2个参数,但查询中仅存在1个参数

完整错误栈:

2024-01-09T21:02:14.081+02:00  WARN 25839 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig' defined in file [/home/martin/Dev/Marketplace/target/classes/bg/softuni/marketplace/config/WebSecurityConfig.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userService' defined in file [/home/martin/Dev/Marketplace/target/classes/bg/softuni/marketplace/service/UserServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userRepository' defined in bg.softuni.marketplace.repository.UserRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.Optional bg.softuni.marketplace.repository.GenericRepository.findProjectedById(java.lang.Object,java.lang.Class); Reason: Failed to create query for method public abstract java.util.Optional bg.softuni.marketplace.repository.GenericRepository.findProjectedById(java.lang.Object,java.lang.Class); At least 2 parameter(s) provided but only 1 parameter(s) present in query

相关代码实现

通用仓库接口(使用动态投影)

@Validated
@NoRepositoryBean
public interface GenericRepository<E, I> extends JpaRepository<E, I> {

    <T extends Viewable<E>> Optional<T> findProjectedById(@NotNull I id, @NotNull Class<T> projection);
//...
}

用户仓库继承通用接口

@Validated
@Repository
public interface UserRepository extends GenericRepository<User, UUID> { 
//...
}

业务层调用代码

@Override
public Optional<String> getUsernameById(@NotNull UUID id) {
    return userRepository
            .findProjectedById(id, UserUsernameProjection.class)
            .map(UserUsernameProjection::getUsername);
}

投影接口定义

public interface UserUsernameProjection extends Viewable<User> {

    String getUsername();
}

排查现状

  • 升级到Spring Boot 3.2.1(对应Spring Framework 6.1.2)后触发该问题
  • 查阅官方发布说明,未提及相关破坏性变更
  • 未找到其他同类问题案例,寻求解决方向提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:53:09