Spring Test交易没有回滚

时间:2013-12-27 12:53:10

标签: spring transactions spring-test

使用spring测试框架,我的事务不会回滚,我完全不知道为什么。我花了好几天试图在SO上找到答案,但无济于事,所以我决定发帖。

TESTFILE

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContextTest.xml")
@Transactional
public class joinTest {

@Autowired
private DAO AccountDAO;//My DAO is annotated with @Repository


@Before
public void beforeMethod()
{
    //log4j append code
}

@Test
public void saveMethod()
 {
    Account acct = new Account();
    acct.setUsername("USER");
    SmokeEvent evt = new SmokeEvent();
    evt.setDateSmoked(new DateTime());
    evt.setAccount(acct);
    AccountDAO.addSmokeEvent(evt);
    }
}

的applicationContext.xml

<context:component-scan base-package="com.abstinence.Logic"/>
<context:annotation-config/>


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:hsql://82.165.173.127/testdb"/>
    <property name="username" value="SA"/>
    <property name="password" value=""/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.abstinence.Logic"/>
    <property name="hibernateProperties">
        <props>
            <prop key ="dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

<tx:advice id="txAdvice">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="hibernateDAOOperation" expression="execution(* com.abstinence.Logic.AccountDAO.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="hibernateDAOOperation"/>
</aop:config>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

我已经检查了log4j中的日志。不寻常的是没有提到任何地方的回滚。提到日志创建会话并将数据插入数据库但没有关于回滚的内容。

有人请帮帮我

2 个答案:

答案 0 :(得分:1)

将以下注释添加到测试类@TransactionConfiguration(defaultRollback = true)应该可以解决您的问题。

答案 1 :(得分:0)

您提到AccountDAO注释了@Repository注释。你是否也用@Transactional注释了DAO?没有它,在测试中执行addSmokeEvent()方法时不会创建任何事务。因此,事件将添加到您的DAO中,但事务管理器无法回滚操作。