JpaRepository与CRUDRepository的区别:findAll

21
我有一个简单的问题:为什么 JpaRepository 返回实体的 List,但是 CrudRepository 返回实体的 Iterable?
这是故意这样做的吗?我猜是因为 CrudRepository 是更通用的接口,可能会有一些特定的存储库返回 Iterable。
这使得在没有使用特定的 JpaRepository 的情况下使用 CrudRepository 更加困难。
谢谢。

我不明白为什么更难,你能举个例子吗? - Rafik BELDI
假设我想获取返回项的大小,在CrudRepository的情况下,我必须手动计数while(hasnext) counter++,而在列表中,我只需调用size()即可。还有其他类似的事情。 - Vadim Kirilchuk
2个回答

27

是的,那似乎是我期望的答案。你能给出这样的商店的任何例子吗?之后我会接受这个答案。谢谢。 - Vadim Kirilchuk
1
请查看我的回答中的最后一个链接,Spring Data团队已经澄清了这个问题,并提供了支持流式传输的数据存储的示例。 - manish
7
为了解决你在问题中提到的问题,你可以使用以下代码:interface BaseRepository<T, ID> extends CrudRepository<T, ID> { @Override List<T> findAll(); }。这也是 JpaRepository 所做的。通过这种方式,你可以使用通用的 CrudRepository 并获得你所需要的相同功能(如 Collection.size() 等)。 - manish
最后一条评论很棒,我会尝试做到的,谢谢! - Vadim Kirilchuk

4

JpaRepository扩展了PagingAndSortingRepository

PagingAndSortingRepository扩展了CrudRepository

这使得JpaRepository可以拥有一个更具体的返回类型Itrable,即List


2
谢谢,但这不是一个答案 :) 我知道它可以,我想知道为什么 =) - Vadim Kirilchuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接