使用@Where子句处理@Transactional rollbackFor

时间:2017-10-04 11:11:44

标签: java hibernate jpa transactions

这是我的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中count的{​​{1}}初始值为0Id也将返回记录,因为line 9尚未提交。没有line 8 exception。它不会thrown并更新数据库,这不应该发生。任何人都可以提供帮助,如果存在任何rollback / hibernate解决方案。

1 个答案:

答案 0 :(得分:1)

通过对count column应用约束可以避免这种情况:

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

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