JpaRepository无法在同一事务中执行多个更新

时间:2016-04-28 21:40:22

标签: hibernate transactions spring-data spring-data-jpa

我遇到一个问题,即单个交易中的多个更新因乐观锁定而导致失败,这对我来说没有意义,因为它在同一个交易中。 以下是我正在做的事情的一个例子:

@Entity
public class MyObj {
    @Id
    private String myKey;

    @Column("val")
    private Integer val;

    @Version
    private Date lastModDate;
}

public interface MyRepo extends JpaRepository<MyObj, String> {

}

@Component
public class MyComponent {

    @Resource
    MyRepo repo;

    @Transactional
    public void doUpdates() {
        for (int i=0; i<4; i++) {
            MyObj obj = repo.findOne("thekey");
            obj.setVal(i);
            repo.save(obj);
        }
    }
}

由于休眠StaleObjectStateException,对第二次尝试的repo.save()调用失败:Row被另一个事务更新或删除。

这对我来说没有意义,因为它应该与我在for循环中以相同的方法进行同一交易。

我在这里完全错了,或者这个东西应该正常工作,也许我有一些配置问题?

我也试过调用saveAndFlush()而不是save()但结果相同。

0 个答案:

没有答案