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