我有一个创建新事务的DAO类。我的JUnit测试有自己的事务,我已经设置为在执行测试后回滚。现在发生的事情是外部事务回滚但内部事务没有。
这是我的DAO类(BookDaoImpl),它创建了一个新事务。
@Component("bookDaoImpl")
@Transactional(propagation=Propagation.REQUIRES_NEW,rollbackFor=DatabaseAccessException.class)
public class BookDaoImpl implements BookDao {
....
....
}
这是我的JUnit测试类(BookDaoImplTest)。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:com/shubham/spring/config/dao-context.xml"})
public class BookDaoImplTest {
@Autowired
private BookDao bookDao;
@Test
@Transactional
@Rollback(true)
public void test() {
Book book=new Book();
book.setAuthor("abc");
book.setBookTitle("bookTitle");
book.setCopiesAvailable(3);
book.setImageName("abc.jpg");
book.setPublisher("publisher");
try {
bookDao.createBook(book);
} catch (DatabaseAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
assertTrue("books greater than 0",bookDao.getAllBooks().size()>0);
}
}
现在我希望内部事务也可以使用外部事务回滚,但它不会回滚。由于某些条件,我必须在dao层创建一个新事务(REQUIRES_NEW)。
建议我解决这个问题的方法。感谢。