Spring JDBCTemplate пакетная вставка БЕЗ отката транзакций (даже если одна или несколько записей в пакете завершаются сбоем)?

Мне нужно сохранить список объектов в БД в виде пакетной вставки, но я не хочу, чтобы весь пакет откатывался, если один или несколько объектов терпят неудачу; т. е. любые записи, которые были успешно сохранены, должны оставаться в БД.

Кроме того, мне нужно определить идентификаторы объектов, которые не удалось сохранить, и вернуть этот список вызывающей стороне.

Ниже приведена простая демонстрация того, что мне нужно сделать; показан класс объекта (список которого мне нужно сохранить) и фрагмент метода DAO:

class Student {
    int code;
    String name;

    ...

}

   
public List<Integer> bulkAddStudents(List<Student> students) {

   String query = "INSERT INTO STUDENT (CODE, NAME) VALUES (:code, :name)";

   List<Integer> failedCodes = new LinkedList<Integer>(); // to store failed student-codes

   List<Map<String, Object>> params = new ArrayList<>();
   try {
       students.forEach(student -> {
          Map<String, Object> stu = new HashMap<>();
          stu.put("code", student.getCode());
          stu.put("name", student.getName());
          params.add(stu);
      });

      namedJdbcTemplate.batchUpdate(query, params.toArray(new HashMap[0]));

      // TODO prevent transactional rollback for failed records

      // TODO get student numbers of failed records; add to "failedCodes" 

   } catch (Exception ex) {
      throw new DAOException(ex);
   }

   return failedCodes; // return IDs of failed records
}

Это может не соответствовать общему варианту использования, но кто-нибудь знает, как сделать именно то, что указано выше? Заранее спасибо.


person Miy    schedule 01.01.2021    source источник
comment
У меня нет никакого представления о фактическом ответе на этот вопрос, но. Может быть, вы можете сделать это нетранзакционным. И определить, какая запись не удалась, как этот ответ stackoverflow.com/a/41662302/4212429   -  person seyid yagmur    schedule 01.01.2021
comment
@seyidyagmur, спасибо, этот вопрос задал ровно две вещи, на которые мне нужны ответы. Позвольте мне попробовать это; Я обновлю это с результатами.   -  person Miy    schedule 01.01.2021
comment
ОБНОВЛЕНИЕ: Связанный ответ выше, похоже, не продолжает сохранять остальные записи в пакете после того, как он обнаружил исключение . То, что я ищу, - это способ сохранения всех объектов независимо от того, что/сколько не удается, и идентифицировать все записи, которые не удалось выполнить.   -  person Miy    schedule 01.01.2021