Spring JPA合并-ObjectOptimisticLockingFailureException

时间:2018-08-11 10:20:16

标签: java spring spring-mvc spring-boot spring-data-jpa

Spring数据JPA合并失败-ObjectOptimisticLockingFailureException

我正在尝试将实体保存到数据库,该实体具有复合主键

  1. 唯一标识号
  2. 日期
  3. 布尔标志

我有一个宁静的API,可以提供上述功能。

我的JPA存储库接口和类:

@NoRepositoryBean
public interface customRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {
  void refresh(T t);

  void merge(T t);

}

public class customRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID>
    implements customRepository<T, ID> {

  private final EntityManager entityManager;

  public customRepositoryImpl(JpaEntityInformation entityInformation, EntityManager entityManager) {
    super(entityInformation, entityManager);
    this.entityManager = entityManager;
  }

  @Override
  @Transactional
  public void refresh(T t) {
    entityManager.refresh(t);
  }

  @Override
  @Transactional
  public void merge(T t) {
    entityManager.merge(t);
  }

我正在尝试使用以下方法将实体合并到服务类中:

 myEntities.forEach(myEntity -> {
          customRepository.merge(myEntity);
        });

当我进行API调用以保存实体时,我看到了以下提到的异常。


    "stack_trace":"org.springframework.orm.ObjectOptimisticLockingFailureException: 
Batch update returned unexpected row count from update [0]; 
actual row count: 0; expected: 1; 
nested exception is org.hibernate.StaleStateException: 
Batch update returned unexpected row count from update [0]; 
actual row count: 0; expected: 1

jpa的合并是否使用批处理更新来保留实体? 而且由于我要遍历实体而进行多个merge()调用,因此为每个merge()调用创建的事务是否在下一个merge()调用之前突然结束?

0 个答案:

没有答案