【发布时间】:2020-06-07 16:57:38
【问题描述】:
我正在尝试将我的实体的所有数据查找为 EntityDTO。我知道如何将所有数据作为 DTO 查找,但我想使用 Example 对象放置一些过滤器并获取 Page 作为结果。
我在存储库中创建了一个方法:
Page<T> findBy(Example e, Pageable p, Class<T> type);
但是调用这个方法会报错
IllegalArgumentException: 至少提供了 1 个参数,但只有 0 个 查询中存在的参数。
这是完整的堆栈跟踪:
org.springframework.dao.InvalidDataAccessApiUsageException: At least 1 parameter(s) provided but only 0 parameter(s) present in query.; nested exception is java.lang.IllegalArgumentException: At least 1 parameter(s) provided but only 0 parameter(s) present in query.
org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:374)
org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:257)
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528)
org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)
org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:149)\r\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
com.sun.proxy.$Proxy132.findBy(Unknown Source)
【问题讨论】:
-
1) 显示完整的堆栈跟踪。 2) 检查是否为参数
e设置了任何属性。 -
@mentallurg 1) 我添加了完整的堆栈跟踪。 2)我正在使用示例,因为有时我会得到一些参数,但有时却没有。另外,我尝试在
e中添加一个参数,但我得到了相同的结果。而且,当我没有在e中传递任何内容并使用带有Page<Entity>的findAll 作为返回时,我会得到预期的结果。 -
如果
e为空(null 或其所有属性为null),则不能使用示例搜索,因为没有没有示例。在这种情况下,您应该使用 findAll() 方法。 -
@mentallurg 正如我之前的评论中提到的,即使在设置属性值之后,我也会遇到同样的错误。看来我无法在 findBy 方法中传递示例。
-
没错。这就是我的意思。如果 Example 为空,则无法按示例搜索。使用 findAll() - 不带参数或带分页参数,但当然不能将 Example 传递给 findAll()。
标签: java spring spring-data-jpa