我正在使用spring事务并休眠以将数据插入oracle数据库表:
这是我面临的问题: 我有两个表在休眠状态下具有一对一的映射。我正在使用下面的方法调用在这两个表中插入数据。事务从一种方法传播到另一种方法,因此在两个表中插入数据都是在一个事务中进行的。
问题:是,当在第二张表中插入数据时,如果抛出诸如“ constraintvoilationexception--不能将null插入特定列”之类的异常,则....那么理想情况下不应将数据插入任何表,即事务都应该回滚,,……但是这不会发生……当在第二个表中插入数据时引发异常时……记录确实会插入到第一个表中不应该发生,即整个交易都应该回滚...
请帮忙,...在应用@Transactional时出现错误的地方,或者还有其他原因(可能来自数据库方面,但不确定)
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void methodA(){
// inserting data in table 1;
methodB();
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void methodB{
// inserting data in table 2;
}
答案 0 :(得分:-1)
定义零(0)个或多个异常类,这些类必须是Throwable的子类,指示哪些异常类型必须引起事务回滚。 Details Here
@Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public void methodA(){
try{
// inserting data in table 1;
methodB();
}
catch(Exception ex)
{
}
}
public void methodB{
// inserting data in table 2;
}