Java (弹簧护套)can可选<&燃气轮机;类与列表类似<&燃气轮机;上课?
我试图将RoomEntity类作为其泛型参数放在列表中,但列表类变为红色(错误),它建议我将列表类更改为可选类Java (弹簧护套)can可选<&燃气轮机;类与列表类似<&燃气轮机;上课?,java,list,spring-boot,optional,Java,List,Spring Boot,Optional,我试图将RoomEntity类作为其泛型参数放在列表中,但列表类变为红色(错误),它建议我将列表类更改为可选类 public interface RoomRepository extends CrudRepository<RoomEntity, Long> { List<RoomEntity> findById(Long id); } 它们是一样的吗 List<RoomEntity> findById(Long id); Optional<R
public interface RoomRepository extends CrudRepository<RoomEntity, Long> {
List<RoomEntity> findById(Long id);
}
它们是一样的吗
List<RoomEntity> findById(Long id);
Optional<RoomEntity> findById(Long id);
List findById(长id);
可选的findById(长id);
findById方法应该根据其id查找单个实体。毕竟,每个实体的id都是唯一的
您可以尝试使用findAllById
,
但我怀疑这会有多大不同
可选的意思是可能有结果,也可能没有结果。可选的
isPresent
方法将表明这一点。findById方法应该通过其id查找单个实体。毕竟,每个实体的id都是唯一的
您可以尝试使用findAllById
,
但我怀疑这会有多大不同
可选的意思是可能有结果,也可能没有结果。可选的
isPresent
方法将表明这一点。根据定义,您的findById
应始终返回1或0个实体(根据for spring数据方法命名),因为您的id
是唯一的键,并且存储库中不能有多个具有该键值的条目。因此,可选的
非常适合这种情况,因为它要么是空的
(存储库中没有带有这样的键的条目),要么是显示有特定值的
(存储库中有条目)。如果您想通过一些非唯一键来查询所有实体,比如说name
列,那么您可以将方法命名为findByName
,返回值为Iterable
,这样,在为存储库生成实现时,spring将理解结果集中可以有多个实体
方法findById
已经在您要扩展的接口中,所以您无法更改它的返回类型
这也可能有用:您的
findById
根据定义应始终返回1或0个实体(根据for spring数据方法命名),因为您的id
是唯一的键,并且存储库中不能有多个条目具有这样的键值。因此,可选的
非常适合这种情况,因为它要么是空的
(存储库中没有带有这样的键的条目),要么是显示有特定值的
(存储库中有条目)。如果您想通过一些非唯一键来查询所有实体,比如说name
列,那么您可以将方法命名为findByName
,返回值为Iterable
,这样,在为存储库生成实现时,spring将理解结果集中可以有多个实体
方法findById
已经在您要扩展的接口中,所以您无法更改它的返回类型
这也可能有用:Spring数据JPA将使查询结果适合您所需的容器 如果您请求一个
列表
,Spring将初始化一个列表,并将任何行数据添加到该列表中,然后返回给您。因此,它将:
可选的
时,Spring会理解您最多需要一行数据。它将在javax.persistence.Query
上解释为getSingleResult()。因此,它将:
如果未找到项目,则返回可选的.empty()
如果恰好有一个匹配项,则返回(结果)的Optional.of
如果存在多个匹配项,则抛出异常(我记得的是ununiqueresultexception
)
在您的情况下,您可以通过id
查找。它在您的桌子上是独一无二的,因此可选应该适合您的用途
但是请注意,您的列表findById(长id)代码>定义是正确的,它不会给您编译器错误(变为红色)。您是否导入了列表
界面?Spring数据JPA将使查询结果适合您所需的容器
如果您请求一个列表
,Spring将初始化一个列表,并将任何行数据添加到该列表中,然后返回给您。因此,它将:
如果未找到项目,则返回空列表
如果找到项目,则返回填充的列表
当您询问一个可选的
时,Spring会理解您最多需要一行数据。它将在javax.persistence.Query
上解释为getSingleResult()。因此,它将:
如果未找到项目,则返回可选的.empty()
如果恰好有一个匹配项,则返回(结果)的Optional.of
如果存在多个匹配项,则抛出异常(我记得的是ununiqueresultexception
)
在您的情况下,您可以通过id
查找。它在您的桌子上是独一无二的,因此可选应该适合您的用途
但是请注意,您的列表findById(长id)代码>定义是正确的,它不会给您编译器错误(变为红色)。您是否导入了列表
界面?可选和列表是两个截然不同的概念
findAllById方法返回一个Iterable。
findById方法返回一个可选值
iterable可用于逐个访问集合的元素,因此可与List类结合使用
可选的是容器对象,它可能包含也可能不包含非空值(零或一个元素)。这将有一个单一的元素,而不是像列表中那样多的元素(如果有)
Crudepository::findAllById可以向其发送多个ID,因此可以返回多个元素,其方法是返回一个iterable,您可以使用它逐个选择每个返回的结果。findById方法只能发送一个ID,因此如果元素存在,则返回该元素(包装为可选的)
List<RoomEntity> findById(Long id);
Optional<RoomEntity> findById(Long id);