这是我的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
的0
初始值为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/