Можно ещё в метод printResults добавить второй аргумент, и там же проверку чтоб количество элементов первого совпадала с количеством второго. Ну и такой же цикл
Если в двух словах, там вся разница в методе save
Классический AR этот метод вызывается прям в сущности, что автоматом либо добавляет, либо изменяет запись
Либо репозиторий, который сохранение или обновление берет на себя и логика из сущности в нем