Spring data JPA: как выбрать, если не найден, то создать? - PullRequest
0 голосов
/ 08 февраля 2020

Есть ли какой-нибудь краткий способ в данных JPA для Spring выполнить:

  1. Выбрать запись по полю
  2. Если найдено, вернуть ее
  3. Если не найдено затем создайте новый и верните его

атомарно?

Помогает ли @Transactional в этом? (Я имею в виду создать метод, отметить его @Transactional, выполнить select, если / else внутри)

Кстати, каков общий чистый SQL способ решения этой проблемы? (Предположим, MySql DB.)

1 Ответ

3 голосов
/ 08 февраля 2020

Нет чистого SQL для того, чего вы хотите достичь, хотя вы можете найти решения c, определяемые поставщиком. Однако вы можете легко добиться этого с помощью Transactional:

class EntityService {
    private final entityRepository;

    // constructor omitted

    @Transactional
    public Entity getOrCreate(Entity entity, Long entityId) {
        return entityRepository.findById(entityId)
            .orElseGet(() -> entityRepository.save(entity));
    }
}

...