[英]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.