为了账号安全,请及时绑定邮箱和手机立即绑定

Java Spring:MongoRepository count() 和 findAll()

Java Spring:MongoRepository count() 和 findAll()

德玛西亚99 2023-08-09 16:30:24
我注意到 mongo 的 Spring 数据中有一些奇怪的东西:MongoRepositoryextendsCrudRepository并findAll()返回 an ,Iterable该count()方法可以正常使用,因为它返回 a long。class CrudRepository {  ...  Iterable<T> findAll();  long count();}在 mongo 中,MongoRepository该findAll()方法返回一个List:class MongoRepository extends CrudRepository {  ...    @Override  List<T> findAll();}但是 aList#size()返回 anint并且该MongoRepository#count()方法仍然返回 a long。当集合超过时会发生什么Integer.MAX_VALUE!?我们还能打电话吗List<T> findAll()?
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞


每个维度表达式都会经历一元数字提升(第 5.6.1 节)。提升的类型必须是 int,否则会发生编译时错误。

2,147,483,648由于维度必须是 int,因此我们可以在数组中存储最大大小,并且考虑到 ArrayList 只是一个数组,因此我们不能在 ArrayList 中存储超过 INTEGER.MAX_VALUE 的值。(当然,List 的不同实现可能有不同的行为)

Spring Data JPA允许您自定义查询方法。您始终可以自由创建返回类型为 Iterable 的查询方法。

@Override
Iterable<T> findAll();


查看完整回答
反对 回复 2023-08-09
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

来自java.util.List#sizejavadoc:

返回此列表中的元素数量。如果此列表包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE

因此,当集合大小超过该方法时,Integer.MAX_VALUEsize方法将返回Integer.MAX_VALUE

我们还能打电话吗List<T> findAll()

是的,但很可能调用会失败OutOfMemoryError


查看完整回答
反对 回复 2023-08-09
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信