Skip to content

No argument for named parameter using parameter multiple times with IN binding #3784

Closed
@AlexanderShchelkunov

Description

@AlexanderShchelkunov

Description

Hello!

I have encountered the problem in version 3.3.9 (works fine in 3.3.8).
When I have a query with a parameter, that used multiple time in query with paging, I have the following error:
org.springframework.dao.InvalidDataAccessResourceUsageException: No argument for named parameter ':logins_1'
It is important to have more data in the database, than page size, to trigger additional count query.
Example of the query:

@Query(
  value = """
      SELECT d
      FROM UserEntity d
      WHERE (:logins) IS NULL OR LOWER(d.login) IN (:logins)
      """
)
Page<UserEntity> findByLogins(@Param("logins") Set<String> logins, Pageable pageable);

Environment

Spring Boot: 3.3.9
Java: JDK 17

Steps to Reproduce

To reproduce the defect run the app and the error will occur during @PostConstruct execution in UserService

Error Message

Caused by: org.hibernate.QueryParameterException: No argument for named parameter ':logins_1'
	at org.hibernate.query.internal.QueryParameterBindingsImpl.lambda$validate$0(QueryParameterBindingsImpl.java:142) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
	at java.base/java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1092) ~[na:na]
	at org.hibernate.query.internal.ParameterMetadataImpl.visitParameters(ParameterMetadataImpl.java:191) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.spi.ParameterMetadataImplementor.visitRegistrations(ParameterMetadataImplementor.java:29) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.internal.QueryParameterBindingsImpl.validate(QueryParameterBindingsImpl.java:138) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.spi.AbstractSelectionQuery.beforeQuery(AbstractSelectionQuery.java:446) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.spi.AbstractSelectionQuery.beforeQueryHandlingFetchProfiles(AbstractSelectionQuery.java:439) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:420) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.Query.getResultList(Query.java:120) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.count(JpaQueryExecution.java:211) ~[spring-data-jpa-3.3.9.jar:3.3.9]
	at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.lambda$0(JpaQueryExecution.java:206) ~[spring-data-jpa-3.3.9.jar:3.3.9]
	at org.springframework.data.support.PageableExecutionUtils.getPage(PageableExecutionUtils.java:63) ~[spring-data-commons-3.3.9.jar:3.3.9]
	at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.doExecute(JpaQueryExecution.java:205) ~[spring-data-jpa-3.3.9.jar:3.3.9]
	at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:93) ~[spring-data-jpa-3.3.9.jar:3.3.9]
	at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:152) ~[spring-data-jpa-3.3.9.jar:3.3.9]
	at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:140) ~[spring-data-jpa-3.3.9.jar:3.3.9]
...

Minimal sample application

See the attachment:
QueryParameterException_demo.zip

Metadata

Metadata

Assignees

Labels

type: regressionA regression from a previous release

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions