关于@Transactional注解 的使用在这里博主就不做过多介绍,以下全文围绕父子方法事务的使用来编写
不在一个类
/**
* 情况一 父子方法有事务 异常在子方法 父子方法回滚
*/
public class A {
@Autowired
private B b;
@Transactional
public Long addBook(Book book) {
Long result = b.add(book);
return result;
}
}
public class B {
@Transactional
public Long add(Book book){
Long result = bookDao.addBook(book);
int i = 1/0;
return result;
}
}
/**
* 情况二 子方法有事务父方法无事务 异常在子方法 子方法回滚父方法不回滚
*/
public class A {
@Autowired
private B b;
@Override
public Long addBook(Book book) {
Long result = b.add(book);
return result;
}
}
public class B {
@Transactional
public Long add(Book book){
Long result = bookDao.addBook(book);
int i = 1/0;
return result;
}
}
同一类内
/*
* 情况一:都有事务注解,异常在子方法出现,事务生效
*/
@Transactional
public Long addBook(Book book) {
Long result = add(book);
return result;
}
@Transactional
public Long add(Book book){
Long result = bookDao.addBook(book);
int i = 1/0;
return result;
}
/*
* 情况二:都有事务注解,异常在主方法出现,事务生效
*/
@Override
@Transactional
public Long addBook(Book book) {
Long result = add(book);
int i = 1/0;
return result;
}
@Transactional
public Long add(Book book){
Long result = bookDao.addBook(book);
return result;
}
/*
* 情况三:只有主方法有事务注解,异常在子方法出现,事务生效
*/
@Override
@Transactional
public Long addBook(Book book) {
Long result = add(book);
return result;
}
public Long add(Book book){
Long result = bookDao.addBook(book);
int i = 1/0;
return result;
}
/*
* 情况四:只有主方法有事务注解,异常在主方法出现,事务生效
*/
@Override
@Transactional
public Long addBook(Book book) {
Long result = add(book);
int i = 1/0;
return result;
}
public Long add(Book book){
Long result = bookDao.addBook(book);
return result;
}
/*
* 情况五:只有子方法有事务注解,异常在子方法出现,事务不生效
*/
@Override
public Long addBook(Book book) {
Long result = add(book);
return result;
}
@Transactional
public Long add(Book book){
Long result = bookDao.addBook(book);
int i = 1/0;
return result;
}