Hello,

I'm trying to update from Spring Boot 3.1.2 to 3.1.3. While the following code works in 3.1.2 (Test&Prod), it now fails with 3.1.3. I changed the Spring Boot version only.

It seems like Spring now analyses the Repository method, as if it was one of those defined without @Query annotation. But here we have the @Query annotation, so it shouldn't try to find the attributes from the method's name.

Repository:

package my.application.core.database.repository;

import static my.application.core.database.model.file.DealerWfsFileImportContent.DEALERS_COUNT_DEALERS_BY_WFS_FILE_IMPORT_CONTENT_ID;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
@Transactional
public interface WfsFileImportContentRepository extends JpaRepository<WfsFileImportContent, Long> {

    @Query(name = DEALERS_COUNT_DEALERS_BY_WFS_FILE_IMPORT_CONTENT_ID, nativeQuery = true)
    Long countDealersByWfsFileImportContentId(@Param("wfsFileImportContentId") long contentId);

}

Entity in question (yes, we're running SELECT statements against XML content):

package my.application.core.database.model.file;

import static my.application.core.database.model.file.DealerWfsFileImportContent.DEALERS_COUNT_DEALERS_BY_WFS_FILE_IMPORT_CONTENT_ID;

import jakarta.persistence.Column;
import jakarta.persistence.ColumnResult;
import jakarta.persistence.ConstructorResult;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.NamedNativeQuery;
import jakarta.persistence.SqlResultSetMapping;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Immutable;

/* NOTE: For these queries the order of the XML Columns, the SELECT values, the ColumnResult values and the final dto needs to be the same */
//@NamedNativeQuery(
// another @NamedNativeQuery defined here but not used
//)

@NamedNativeQuery(
    name = DEALERS_COUNT_DEALERS_BY_WFS_FILE_IMPORT_CONTENT_ID,
    query = "SELECT COUNT(dealer_id) "
        + "  FROM wfs_file_import_content wfs, "
        + "  XMLTABLE(XMLNAMESPACES('http://my.services/service' AS x),"
        + "             '/x:pushGeofenceDataRequest/x:request/x:dealers/x:dealer'"
        + "                PASSING request_body "
        + "                COLUMNS "
        + "                    dealer_id TEXT PATH 'x:dealer_id' "
        + ") "
        + " where wfs.id = :wfsFileImportContentId"
)

@Immutable
@Entity
@Table(name = "wfs_file_import_content")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DealerWfsFileImportContent {

    @Id
    @Column(name = "id")
    private Long fileImportContentId;
    private String market;
    private String dealerId;
    private String name;

    @Transient
    public static final String DEALERS_COUNT_DEALERS_BY_WFS_FILE_IMPORT_CONTENT_ID = "count_dealers";
}

Exception when starting the application using Spring Boot 3.1.3:

16085 [main] ERROR o.s.boot.SpringApplication - Application run failed 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'wfsDataProcessor' defined in file [/home/stsc/IdeaProjects/My_Project/backend-interfaces/target/classes/my/application/core/processing/wfs/WfsDataProcessor.class]: Unsatisfied dependency expressed through constructor parameter 4: Error creating bean with name 'deltaCalculationService' defined in file [/home/stsc/IdeaProjects/My_Project/backend-business/target/classes/my/application/core/service/delta/DeltaCalculationService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'wfsFileService' defined in file [/home/stsc/IdeaProjects/My_Project/backend-business/target/classes/my/application/core/service/file/WfsFileService.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'wfsFileImportContentRepository' defined in my.application.core.database.repository.WfsFileImportContentRepository defined in @EnableJpaRepositories declared on Application: Could not create query for public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); Reason: Failed to create query for method public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); No property 'contentId' found for type 'WfsFileImport'; Traversed path: WfsFileImportContent.wfsFileImport
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:942)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
    at my.application.core.app.Application.main(Application.java:18)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'deltaCalculationService' defined in file [/home/stsc/IdeaProjects/My_Project/backend-business/target/classes/my/application/core/service/delta/DeltaCalculationService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'wfsFileService' defined in file [/home/stsc/IdeaProjects/My_Project/backend-business/target/classes/my/application/core/service/file/WfsFileService.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'wfsFileImportContentRepository' defined in my.application.core.database.repository.WfsFileImportContentRepository defined in @EnableJpaRepositories declared on Application: Could not create query for public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); Reason: Failed to create query for method public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); No property 'contentId' found for type 'WfsFileImport'; Traversed path: WfsFileImportContent.wfsFileImport
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:888)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
    ... 19 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'wfsFileService' defined in file [/home/stsc/IdeaProjects/My_Project/backend-business/target/classes/my/application/core/service/file/WfsFileService.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'wfsFileImportContentRepository' defined in my.application.core.database.repository.WfsFileImportContentRepository defined in @EnableJpaRepositories declared on Application: Could not create query for public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); Reason: Failed to create query for method public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); No property 'contentId' found for type 'WfsFileImport'; Traversed path: WfsFileImportContent.wfsFileImport
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:888)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
    ... 33 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'wfsFileImportContentRepository' defined in my.application.core.database.repository.WfsFileImportContentRepository defined in @EnableJpaRepositories declared on Application: Could not create query for public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); Reason: Failed to create query for method public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); No property 'contentId' found for type 'WfsFileImport'; Traversed path: WfsFileImportContent.wfsFileImport
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:888)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
    ... 47 common frames omitted
Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); Reason: Failed to create query for method public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); No property 'contentId' found for type 'WfsFileImport'; Traversed path: WfsFileImportContent.wfsFileImport
    at org.springframework.data.repository.query.QueryCreationException.create(QueryCreationException.java:101)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:115)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:99)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:88)
    at java.base/java.util.Optional.map(Optional.java:260)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.<init>(QueryExecutorMethodInterceptor.java:88)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:357)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:279)
    at org.springframework.data.util.Lazy.getNullable(Lazy.java:245)
    at org.springframework.data.util.Lazy.get(Lazy.java:114)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:285)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:132)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1817)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
    ... 58 common frames omitted
Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.lang.Long my.application.core.database.repository.WfsFileImportContentRepository.countDealersByWfsFileImportContentId(long); No property 'contentId' found for type 'WfsFileImport'; Traversed path: WfsFileImportContent.wfsFileImport
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:107)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:124)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:258)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:95)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:111)
    ... 70 common frames omitted
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property 'contentId' found for type 'WfsFileImport'; Traversed path: WfsFileImportContent.wfsFileImport
    at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:90)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:405)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:381)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:415)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:438)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:438)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:381)
    at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:334)
    at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:316)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:299)
    at org.springframework.data.repository.query.parser.Part.<init>(Part.java:81)
    at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:242)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:243)
    at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:372)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:373)
    at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:96)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:100)
    ... 74 common frames omitted

Process finished with exit code 1

Thanks a lot for your help - and do not hesitate to contact me, if you need anything for your analysis.

Stefan

Comment From: quaff

You should report it to https://github.com/spring-projects/spring-data-jpa/issues with a minimal reproducer.

Comment From: stefan-schilling

You should report it to https://github.com/spring-projects/spring-data-jpa/issues with a minimal reproducer.

Alright, created https://github.com/spring-projects/spring-data-jpa/issues/3129 - thanks.