看来我的配置错过了这一行:
然后,在我的服务类中,我使用@Transactional注释.例如
@Service
class CompanyServiceImpl implements CompanyService{
@Autowired
private CompanyDAO companyDAO;
@Transactional
public void addCompany(Company company) {
companyDAO.addCompany(company); // in here, there is JDBC sql insert
companyDAO.addCompany_fail(company); // just for test
}
}
如果addCompany_fail()中发生异常,则第一个addCompany()也将被回滚.
PS:
似乎许多人误解使用这样的Hibernate / Spring框架只是为了避免JDBC和事务控制的复杂性.许多人认为“JDBC和事务是如此复杂,只是使用Hibernate并忘记了这两个”.互联网上有关Spring Hibernate或Spring JDBC的例子似乎并不关心事务.我觉得这是一个坏笑话.交易是太严重,只是让事情处理它没有真正的了解.
Hibernate和Spring是如此强大和复杂.那么正如有人说的那样,“大国有责任”.