一直以为在类前面加
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
就能让事务自动回滚,后来经过无数次的验证,我错了。 原因很简单,忘记重载
org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
public class UserServiceTest extends AbstractTransactionalJUnit4SpringContextTests{
完整类,贴出来:
import java.sql.Timestamp;
import org.eric.ehome.dao.OutcomeDao;
import org.eric.ehome.domain.Outcome;
import org.eric.ehome.domain.OutcomeType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@ContextConfiguration({"classpath:ehome-servlet.xml","classpath:ehome-database.xml","classpath:ehome-service.xml"})
public class OutcomeDaoHibTest extends AbstractTransactionalJUnit4SpringContextTests{
@Autowired
private OutcomeDao outcomeDao;
@Autowired
private HibernateTemplate hibernateTemplate;
@Test
public void testSave(){
Outcome oc = new Outcome();
oc.setAmount("190");
oc.setConsumeDate(new Timestamp(System.currentTimeMillis()));
oc.setCreateDate(new Timestamp(System.currentTimeMillis()));
oc.setType(new OutcomeType(1, "q死s"));
hibernateTemplate.save(oc);
}
}
如果遇到找不到 transactionManager,请在配置文件中添加,因为@TransactionConfiguration默认使用的是这个事务管理。
如果提示 CGLIB2 is not available 处理方法 ,请看:http://dycg.iteye.com/blog/1775649