JPA。 FindAllBy 可能会抛出哪些异常?

问题描述 投票:0回答:1

我有一些具有独特字段的实体

name

@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;
}

我需要知道这个函数可能会抛出什么异常:

public List<Product> findAllByName(List<String> names);

我从文档中知道,如果传递 null (或某些列表元素为 null),

findAllBy*
方法将抛出
IllegalArgumentException
。 但是这个方法会返回什么如果:

  1. 什么也没找到。
  2. 结果列表大小不等于
    names
    大小。

我对第二个案例非常感兴趣。如果没有抛出异常,我应该自己抛出吗?

spring jpa spring-data
1个回答
0
投票

https://www.baeldung.com/spring-boot-bean-validation

@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@NotBlank(message = "Name is mandatory")
private String name;

@NotBlank(message = "Email is mandatory")
private String email;

// standard constructors / setters / getters / toString
 }

使用@Valid注释。

@RestController
public class UserController {

@PostMapping("/users")
ResponseEntity<String> addUser(@Valid @RequestBody User user) {
    // persisting the user
    return ResponseEntity.ok("User is valid");
}

// standard constructors / other methods

}

@ExceptionHandler 注解允许我们通过一个方法处理指定类型的异常。

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, String> handleValidationExceptions(
MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
    String fieldName = ((FieldError) error).getField();
    String errorMessage = error.getDefaultMessage();
    errors.put(fieldName, errorMessage);
});
return errors;

}

© www.soinside.com 2019 - 2024. All rights reserved.