Обновить сущность, если она уже существует, или создать с помощью Spring jpa - PullRequest
0 голосов
/ 27 декабря 2018

Я новичок в данных весны jpa.У меня есть сценарий, в котором мне нужно создать объект, если он не существует, или обновить его на основе не первичного ключа name . Ниже приведен код, который я написал для создания нового объекта, он работает нормально, но если он уже существуетзапись, создание дубликатов. Как написать метод для обновления, если существует, я обычно получаю список записей от клиента.

@Override
@Transactional
public String createNewEntity(List<Transaction> transaction) {

   List<Transaction> transaction= transactionRespository.saveAll(transaction);
}

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Во-первых, это от Google составной ключ означает

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

Составной ключ с уникальным ключом является пустой тратой.

, если вы хотите обновить сущностьjpa, вам нужен ключ для классификации, если сущность уже существует.

    @Transactional
public <S extends T> S save(S entity) {
    if(this.entityInformation.isNew(entity)) {
        this.em.persist(entity);
        return entity;
    } else {
        return this.em.merge(entity);
    }
}

Есть два способа решения вашей проблемы.

Если вы не можете получить идентификатор от клиента при обновлении, это означает, что идентификатор потерял свою первоначальную функцию.Затем удалите аннотацию @Id в поле id, установите имя с помощью @Id.И не устанавливайте автоматическую генерацию для него.

Я думаю, что вам нужно @Column (unique = true, nullable = false) в поле вашего имени.И это приказ обновить что-то.

Transaction t = transactionRepository.findByName(name);
t.set.... //your update
transactionRepository.save(t);
0 голосов
/ 27 декабря 2018

Добавьте в свой объект транзакции переменную с именем name, чтобы назвать ее уникальной:

  @Entity
  public class Transaction {
      ...
      @Column(name="name", unique=true)
      private String name;
      ... 
  } 

Тогда вы не сможете добавить повторяющиеся значения для столбца имени.

...