JPA中findAllByName方法的异常及返回值问题咨询
Spring Data JPA
findAllByName 方法的异常与返回值说明 实体类定义
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "products") public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String name; }
Repository 查询方法
public List<Product> findAllByName(List<String> names);
已知异常场景
如你所知,当传入的names为null,或者列表中包含null元素时,该方法会直接抛出IllegalArgumentException。
两种场景的返回结果说明
未找到任何匹配数据时
方法会返回一个空的List对象(而非null),不会抛出任何异常。返回列表大小与传入
names列表大小不一致时
Spring Data JPA 不会抛出任何异常,返回的列表仅包含数据库中实际存在的、与传入name匹配的Product实例。比如你传入3个name,但其中只有2个在数据库中有对应记录,方法就会返回包含2个元素的列表。
是否需要自行抛出异常
这完全取决于你的业务需求:
- 如果业务逻辑要求所有传入的
name必须在数据库中存在,那么你需要在调用该方法后自行校验返回列表的大小。若与传入的names列表大小不一致,可以抛出自定义业务异常,或者复用IllegalArgumentException来提示参数不合法。 - 如果业务允许部分
name不存在,直接返回匹配到的结果即可,无需额外处理。
内容的提问来源于stack exchange,提问作者AndyFlight
相关产品推荐
相关产品推荐

