繁体   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