我有一个实体学生: ID,名称(字符串),...
我有另一个实体 ArchivedStudents 为:
ID
、名称
(字符串)、存档日期
、...
我随机生成一个新学生列表,在将此列表保留到学生表中之前,我正在执行: 我正在尝试从新学生列表中删除学生或 ArchivedStudents 中已存在姓名的学生。
目前,我正在传递学生姓名列表,并检查 ArchiveStudent 表中是否已存在,然后删除重复项。然后检查学生表中是否已存在该姓名,删除重复项,然后保留剩余的。
ArchiveStudents 和 Student 表中的记录数以百万为单位。
我想仔细检查这是否是最佳的或者是否有更好的方法。我正在使用 findAllByStudentIn
方法来识别重复项。
最佳答案
最好的方法是一次性访问数据库:
List<Student> students = generateRandomStudents();
List<String> namesInDb = (List<String>) entityManager.createQuery("select s.name from Student s where s.name in :names")
.setParameter("names", students.stream().map(Student::getName).collect(toList()))
.getResultList();
studentsRepository.saveAll(students.stream().filter(s -> !namesInDb.contains(s.getName())).collect(toList()));
关于java - 识别列表中已存在于数据库中的项目并将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60009072/