Java Hibernate java.lang.IllegalArgumentException : Unknown parameter position: 1

标签 java spring hibernate jpa hql

这是我的查询方法:

@Query(value = "select new com.twognation.hub.dto.GameDTO(game.id, game.name, game.active, game.description, game.coverImage, game.logo, game.backgroundImage, game.featuredImage, game.characterImage, game.smallCoverImage, count(tournament.id) as tournamentCount) from Game game left join Tournament tournament on game.id=tournament.game where lower(game.name) like '%:name%' group by game.id order by tournamentCount desc, game.id",
                countQuery = "select count(1) from Game game left join Tournament tournament on game.id=tournament.game where lower(game.name) like '%:name%' group by game.id order by tournamentCount desc, game.id")
Page<GameDTO> findAllOrderByTournamentCount(@Param("name") String name, Pageable page);

当我调用此方法时,我收到此错误:

Caused by: java.lang.IllegalArgumentException: Unknown parameter position: 1    
    at org.hibernate.query.internal.QueryParameterBindingsImpl.getBinding(QueryParameterBindingsImpl.java:240)  
    at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:503)  
    at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:104)  
    at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:141)     
    at org.springframework.data.jpa.repository.query.StringQueryParameterBinder.bind(StringQueryParameterBinder.java:61)    
    at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:101)     
    at org.springframework.data.jpa.repository.query.SpelExpressionStringQueryParameterBinder.bind(SpelExpressionStringQueryParameterBinder.java:76)    
    at org.springframework.data.jpa.repository.query.ParameterBinder.bindAndPrepare(ParameterBinder.java:161)   
    at org.springframework.data.jpa.repository.query.ParameterBinder.bindAndPrepare(ParameterBinder.java:152)   
    at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.doCreateQuery(AbstractStringBasedJpaQuery.java:81)     
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:190)    
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.doExecute(JpaQueryExecution.java:186)     
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:87)   
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:116)  
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:106)    
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:492)     
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:475)   
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)    
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56)    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)    
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)   at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)  
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)    
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)   
    ... 172 common frames omitted

最佳答案

这个:

'%:name%'

在 JPA 中只是一个原生字符串,要解决这个问题,您可以使用 CONCAT 运算符,如下所示:

CONCAT('%', :name, '%')

稍后将转换为 '%some_value%' 例如

关于Java Hibernate java.lang.IllegalArgumentException : Unknown parameter position: 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52187989/

相关文章:

java - 没有主键表的 Hibernate 映射

具有长类名和字段名的 Java 默认序列化

java - 如何模拟 Maven 插件环境和/或项目配置

java - qtjambi - QApplication.initialize 在主方法之外

spring - 如何在没有 web.xml 的情况下在 Java Config 中定义 Spring 3.2 Async Servlet-Filter

java - 如何将内部类添加到 Spring 应用程序上下文以进行单元测试?

spring - Spring @Async 方法未捕获/重新抛出异常的问题

java - Spring , hibernate : issue with creating new @Entity model

postgresql - Hibernate Postgresql select for update with outer join 问题

java - CompletableFuture 超时后返回所有完成的结果