我有一个基于Spring的应用程序,它使用JPA处理与数据库相关的过程。我使用分页来提高应用程序性能,但是我一直面临着关于存储库方法返回的数据类型的一个非常特殊的问题。我需要我的存储库来返回List
元素,我将Pageable
对象传递给存储库方法,根据页面参数获取我需要的记录,根据此文档{{ 3}}我应该能够通过简单地将reposiroty方法的返回数据类型从List
替换为Page<User>
来获取我想要的List<User>
个元素,但由于某种原因它只能起作用对于某些方法但不适用于所有方法,例如,此实体类的findAll
方法应返回List<User>
,而是返回Page<User>
,但如果我将其转换为@Query
将方法转换为自定义SELECT t FROM Table t
方法(List<User>
),然后按预期获得Pageable
。由于我已经使用List<>
实现了其他存储库方法并且这些方法按预期工作,我不确定这个意想不到的行为发生的条件是什么,返回Page<>
而不是Page<User>
。
我甚至不确定这是如何工作的,我的HTTP控制器允许返回List<User>
,即使设置为@Repository
public interface UserRepository extends CrudRepository<User, Long> {
public List<User> findAll();
//This way the method is returning a Page<> object
public List<User> findAll(Pageable pageable);
....
...
}
也很难。
为什么会发生这种情况,我该如何避免这种行为?有没有办法强制Spring返回在这些情况下在方法签名上声明的数据类型?
这是存储库重要代码:
@Query
使用@Repository
public interface UserRepository extends CrudRepository<User, Long> {
public List<User> findAll();
//This way the method is returning a List<User>
@Query("SELECT t FROM User t")
public List<User> findAll(Pageable pageable);
....
...
}
findAll()
我可以重载Pageable
方法来使用List<string> filters = new List<string>();
filters.Add("Apple");
filters.Add("Orange");
filters.Add("Banana");
对象,除了返回类型问题之外它还能正常工作。