要查找的批量数据是否存在:Spring Data JPA

时间:2018-09-21 12:27:10

标签: spring spring-boot spring-data-jpa spring-data

我收到一个Post请求,该请求会给我一个List<PersonApi>对象

class PersonApi {
  private String name;
  private String age;
  private String pincode ;
}

我有一个名为Person的实体对象

@Entity
@Table(name = "person_master")
public class Person{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(name = "name")
    String name;

    @Column(name = "age")
    String age;

    @Column(name = "pincode ")
    String pincode ;
}

我在Post请求中的记录看起来像这样(下面数据的伪代码表示)

[
"Arun","33","09876gh"
"James","34","8765468"
]

我需要使用Spring JPA进行批量验证。给定{{1}中的所有条目的条件下,赋予List<PersonApi>并获得TrueFalse }}对象列表应该在数据库中。

如何执行此操作?

2 个答案:

答案 0 :(得分:2)

伪代码:

List<PersonApi> personsApiList = ...; //from request
List<Person> result = personRepository.findAll();

在服务类中,您可以访问存储库以获取所有数据库实体,并检查您的personapi列表是否完整。

boolean allEntriesExist = result.stream().allMatch(person -> personsApiList.contains(createPersonApiFromPerson(person)));

public PersonApi createPersonApiFromPerson(Person person){
   return new PersonApi(person.getName(), person.getAge(), person.getPincode());
}

答案 1 :(得分:0)

所选答案不是正确答案。 (并非总是正确的) 您正在选择整个数据库以检查是否存在。除非您的用例非常特殊(即表非常小),否则会降低性能。

正确的方法可能是从为每个人员发布repository.existsById(id)开始,如果您从不删除人员,甚至可以在其之上应用一些缓存。

exists