簡體   English   中英

如果已經存在則更新實體或使用 spring jpa 創建

[英]Update entity if already exists or create using spring jpa

我是 spring 數據 jpa 的新手。 我有一個場景,如果不存在,我必須創建一個實體,或者根據非主鍵名稱進行更新。下面是我為創建新實體而編寫的代碼,它工作正常,但如果一個已經存在的記錄,它會創建重復。如何編寫一個方法來更新如果存在,我通常從客戶端獲取記錄列表。

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

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

在名為 name this 的變量上添加您的事務實體以命名為唯一:

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

那么您將無法為 name 列添加重復值。

首先,這是來自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 字段上的注釋 @Id,使用 @Id 設置名稱。 並且不要為其設置自動生成。

我認為您想要的是您的姓名字段上的 @Column(unique = true,nullable = false) 。 這就是更新某些東西的順序。

Transaction t = transactionRepository.findByName(name);
t.set.... //your update
transactionRepository.save(t);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM