java.lang.IllegalArgumentException:要么在所有参数上使用@Param,除了键入一次的Pageable 和Sort,或者根本不使用none

java.lang.IllegalArgumentException:Either use @Param on all parameters except Pageable and Sort typed once, or none at all

我正在使用 Spring 数据 Cassandra.I 当我将多个参数传递给存储库方法时出现异常。 任何人都可以帮助如何传递多个参数以附加和使用 where 子句。

我的回购方法:

@Query("select site_name,month_gen from mykeyspace.dgr_item where type='Site' and name = ?0 and dgr_date in (:list)")
public List<Object> findGen(String siteName, @Param("list") List<Date> listt);

异常:

Caused by: java.lang.IllegalArgumentException: Either use @Param on all parameters except Pageable and Sort typed once, or none at all!
at org.springframework.util.Assert.isTrue(Assert.java:68)
at org.springframework.data.repository.query.Parameters.assertEitherAllParamAnnotatedOrNone(Parameters.java:294)
at org.springframework.data.repository.query.Parameters.<init>(Parameters.java:91)
at org.springframework.data.cassandra.repository.query.CassandraParameters.<init>(CassandraParameters.java:45)
at org.springframework.data.cassandra.repository.query.CassandraQueryMethod.createParameters(CassandraQueryMethod.java:131)
at org.springframework.data.cassandra.repository.query.CassandraQueryMethod.createParameters(CassandraQueryMethod.java:45)
at org.springframework.data.repository.query.QueryMethod.<init>(QueryMethod.java:75)
at org.springframework.data.cassandra.repository.query.CassandraQueryMethod.<init>(CassandraQueryMethod.java:64)
at org.springframework.data.cassandra.repository.support.CassandraRepositoryFactory$CassandraQueryLookupStrategy.resolveQuery(CassandraRepositoryFactory.java:152)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:436)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:221)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:277)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:263)
at org.springframework.data.cassandra.repository.support.CassandraRepositoryFactoryBean.afterPropertiesSet(CassandraRepositoryFactoryBean.java:76)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 41 common frames omitted

原因:java.lang.IllegalArgumentException:要么在所有参数上使用 Param 注释,但键入一次的 Pageable 和 Sort 除外,或者根本不使用 none!指出所有参数都应该有 Param 注释,你的第一个参数没有

我遇到了同样的问题,我在 : 和表达式值之间添加了 space。

@Query ("SELECT yoga FROM Yoga yoga WHERE yoga.status =: status AND yoga.category =: category ORDER BY yoga.priorityOrder DESC")
List<YogaMaster> getVideosOfACategory(@Param("status")int status, @Param("category") String category, Pageable pageable);

然后我改成了

@Query ("SELECT yoga FROM YogaMaster yoga WHERE yoga.status = :status AND yoga.category = :category ORDER BY yoga.priorityOrder DESC")
List<YogaMaster> getTop4VideosOfACategory(@Param("status")int status, @Param("category") String category, Pageable pageable);

它奏效了。

区别是 =: 类别(错误)和 = :类别(正确),检查间距。

如果您使用 PageRequest 而不是 Pageable,这可能是由于另一个问题。

如果您也在存储库中使用 PageRequest,也会发生这种情况。

你应该使用 Pageable 和下面的导入,

import org.springframework.data.domain.Pageable;

当我不小心导入了错误的 Pageable class 并且谷歌搜索将我带到这里时,我遇到了同样的异常。