这是我的Entity

@Entity
@Table(name = "example")
@Where(clause = "count >= 0")
public class Example {
  @Column(name="count")
  private Integer count;

  //some code
}




这是我的DML操作:

@Transactional(rollbackFor = Exception.class)
public void updateService {
    update();
}

void update(){
    // findOne(Id) - if null throw Exception
    // --count & save()                        //line 8
    // findOne(Id) if null throw Exception     //line 9
    // --count & save()


    // if something fails
    throw new Exception("Exception thown.");
}




假设db中count0初始值为Id。由于line 9尚未提交,因此line 8还将返回记录。没有exception thrown。它不会rollback并更新数据库,这不会发生。任何人都可以提供帮助,如果为此存在任何hibernate / JPA解决方案。

最佳答案

可以通过将约束应用于count column来防止这种情况:


@Column(name = "count")
@Min(0)
private Integer count;




现在save()throw org.springframework.transaction.TransactionSystemException

关于java - 使用@Where子句处理@Transactional rollbackFor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46563389/

10-10 00:42