java - Spring 数据JPA : Find all by example and page and return DTO (Projection)

标签 java spring spring-data-jpa

我正在尝试查找我的实体作为 EntityDTO 的所有数据。我知道如何以 DTO 形式查找所有数据,但我想使用示例对象放置一些过滤器并获取页面作为结果。

我在存储库中创建了一个方法:

Page<T> findBy(Example e, Pageable p, Class<T> type);

但是调用此方法会导致错误

IllegalArgumentException: At least 1 parameter(s) provided but only 0 parameter(s) present in query.

这是完整的堆栈跟踪:

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)

最佳答案

在 Spring 存储库接口(interface)中,查询是根据方法名称创建的。

请尝试这个:

Page<T> findByExample(Example e, Pageable p, Class<T> type);

如果不起作用,您可以在这里找到解决方案:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories

关于java - Spring 数据JPA : Find all by example and page and return DTO (Projection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62248728/

相关文章:

java - 为什么在通过 REST API 调用时枚举并不总是有效?

java - Ubuntu中eclipse 3.8安装maven

java - 覆盖子类实体中@MappedSuperclass 的继承属性(例如继承关系表名、列名...等)

spring - 如何从 Spring Boot 中排除依赖项

java - 如何将 BigDecimal 与 JFormattedTextField 一起使用

java - 在 Spring 中格式化 BigDecimal

mysql - 在 Spring Boot 下执行 H2

Java Bean创建异常

spring - 使用多个实例中断quartz中的作业

spring - 延迟加载有效,但不应该