java - 识别列表中已存在于数据库中的项目并将其删除

标签 java sql spring spring-data jpql

我有一个实体学生: 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/

相关文章:

java - 在 Spark MLlib 上使用来自 Java 的 Breeze

python - 如何将此 SQL 语句转换为 Python : MID? SUBSTRING?

sql - 如何在 Hibernate 中使用数组字段创建条件

mysql - 我如何在 SQL 中组合这两个表,以便第一个表的每一行都有第二个表中每一行的副本?

java - 处理了 MaxUploadSizeExceededException 但文件仍在上传?

java - 如何使用 quartz 每 2 分钟在 mule 中运行一次查询

java - JNLP 推荐服务器

java - 如何比较Java中的字符串?

mysql - JPA-hib不保存到数据库,而是读取数据库(mysql,Hikari,tomcat 9,spring boot 2.1.8)

java - Spring PropertyPlaceholderConfigurer 可以忽略属性位置路径中未设置的属性吗?