1

每当您有一个扩展 CrudRepository 的存储库时,例如:

@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    //something 
}

并且您想使用该方法findAll()

Iterable<T> findAll();

你会得到一个可迭代的。显然,我可以将 Iterable 转换为列表,如下所示:

public List<Employee> findAll() {
    List<Employee> employees = new ArrayList<>();
    employeeRepository.findAll().forEach(employees::add);
    return students;
}

或者我可以覆盖findAll()存储库上的方法,甚至可以简单地使用JpaRepository,但我的问题是:

  1. 首先获得 Iterable 的目的是什么?通过将其转换为列表,我是否违背了使用 CrudRepository 的全部目的?
  2. 如果确实是将 Iterable 转换为 List 的好方法。实现这一目标的最有效方法是什么?

希望有人能给我一些见解。

4

1 回答 1

1

首先获得 Iterable 的目的是什么?

简而言之,返回Iterable<T>可能很有用,因为不仅List<T>s 是Iterable<T>s,而且您可能想要返回不是列表的东西;

实现这一目标的最有效方法是什么?

我不确定你认为什么是最有效的,但投射会很好:

public List<Employee> findAll() {
    return new ArrayList<>((Collection<? extends Employee>) employeeRepository.findAll());
}
于 2021-03-07T12:28:23.960 回答