Spring Data、Repository Rest 资源调用继承方法

Posted

技术标签:

【中文标题】Spring Data、Repository Rest 资源调用继承方法【英文标题】:Spring Data, Repository Rest Resource Call Inherited Methods 【发布时间】:2020-01-15 03:10:56 【问题描述】:
@RepositoryRestResource
public interface EmployeeRepository extends JpaRepository<Employee, Integer> 

    @Query("SELECT employee FROM Employee employee")
    List<Employee> getAll();

    Page<Employee> findAll(Example<Employee> employeeExample, Pageable pageable);


如果我打电话:

.../api/employees/search/getAll 它给了我getAll 方法的结果

但是 JpaRepository 具有相同的功能,但我无法调用它:

.../api/employees/search/findAll

幸运的是,我能够编写具有相同功能的@Query 方法。

但是现在我需要从QueryByExampleExecutor调用this方法(JpaRepository扩展了这个接口)

<S extends T> Page<S> findAll(Example<S> var1, Pageable var2);

我为 EmployeeRepository 写了一些函数,以便将其称为休息端点。

Page<Employee> findAll(Example<Employee> employeeExample, Pageable pageable);

但我得到以下错误:

findAll(Example, Pageable)' in 'com.foo.repository.EmployeeRepository' 与 'findAll(示例,可分页)' 在 'org.springframework.data.repository.query.QueryByExampleExecutor'; 两种方法都有相同的擦除,但都没有覆盖另一个

我无法编写与该方法具有相同功能的@Query 方法。

如何在 Spring-Data 中将继承的存储库方法称为 Rest Enpoint?

【问题讨论】:

可能是 ***.com/questions/25201306/… ***.com/questions/21116539/… 的副本 不,我只是问如何从 Spring Jpa 调用继承的方法作为 rest 端点,没有自定义方法实现。 【参考方案1】:

正确的签名是,

@Override
<S extends Employee> Page<S> findAll(Example<S> example, Pageable pageable)

【讨论】:

我尝试了你的方法,然后我调用了“...api/employees/search”。但是我看不到 findAll 方法。

以上是关于Spring Data、Repository Rest 资源调用继承方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data 关于Repository的介绍

Spring Data Redis - 对 Repository 的 @Transactional 支持

Spring Data Rest:为扩展 Revision Repository 的 Repository 公开新端点

Spring Data JPA 提供的各种Repository接口作用

Spring Data JPA Custom Repository

Spring Entity Manager 和 Spring Data Repository 有啥区别?