0

我有如下所示的 Service Impl

@Transactional
public void addmethod(final requesBOdy requesBOdy)
      throws methodException {
    

    Entityclass entityclassobj =
        repo.findBycol1Andcol2Andcol3Andcol4(col1,col2,col3,col4)
            
    // if above find returns an row already found then update that row as inactive
    if (null != entityclassobj) {
      entityclassobj.setStatusCd(change some value on col4);
      repo.save(entityclassobj;
    }
    // insert the request body into the table
    EntityClass EntityobjForNewRequest =
        new Entityclass();
    setupentity(EntityobjForNewRequest, requestBody);
    repo.save(EntityobjForNewRequest);
}

回购:

public interface Repo
    extends CrudRepository<EntityClass, String> {
 
 Entityclass findBycol1Andcol2Andcol3Andcol4(
      String col1, String col2, String col3, String col4);
}

问题是,当请求来自 Postman 时,它运行良好,它通过 findBycol1Andcol2Andcol3Andcol4 自定义方法找到活动行并将该行更新为非活动行并从请求正文插入新行。但是当我们运行性能测试时,它会同时触发两个用户,当用户 1 试图找到活动行但它找不到一个所以它从请求正文中插入行,同时用户 2 也试图找到活动在 user1 提交插入的行之前的行,因此它插入了同一行。现在第三个用户尝试查找活动行并且它被插入两次之前它返回了我们不期望的实体列表并抛出javax.persistence.NonUniqueResultException:任何线索或指针会有很大帮助吗?

用 saveAndFlush 方法也试过这个 JPARepo 但没有 lucj

4

0 回答 0