JPA как обновить сущности в БД не по ключевому полю?

Имеется сущность:

@Entity
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    String name;
    Long companyId;
}

Также имеется репозиторий c методом saveAll:

@Override
public List<Category> saveAll(List<Category> categories) {
    List<Category> categoriesInRepoCategories = new ArrayList<>();
    categoryRepository.saveAll(categories).forEach(categoriesInRepoCategories::add);
    return categoriesInRepoCategories;
}

Проблема собственно вот в чем, список категорий я каждый раз получаю парсингом с сайта, соответственно мне не известны id, и при вызове saveAll у меня в базу дублируются записи. Я так понимаю решения из коробки по данному случае нету? И придется изначально извлекать все записи из БД, сопоставлять их по имени с теми что вернул парсер (проставлять существующим id) и записывать полученные данные в БД, или все же можно как-то пометить поле name?

В итоге добавил такой метод:

public List<Category> upsertAll(List<Category> categories) {
    List<Category> categoriesInRepoCategories = findAll();
    categories.forEach(c -> {
        Long id = categoriesInRepoCategories.stream().filter(cc -> cc.getName().equals(c.getName())).findAny().orElse(c).getId();
        c.setId(id);
    });
    return saveAll(categories);
}

Ответы (1 шт):

Автор решения: Stan

Spring в методе save() использует следующую логику. Если у сущности есть id, то вызывается метод update(), если id отсутствует то вызывается save().

Соответственно теперь вам нужно реализовать эту логику самому.

Почему не аннотировали name - @Column(unique=true), если дубли не должны попадать?

→ Ссылка