无法在我的Spring JPA集成测试中使@Rollback起作用

6

这是一个小测试类,与IT技术有关。问题在于它在每个测试运行后没有回滚事务。我做错了什么? :)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/META-INF/catalog-spring.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class TermTest
{
    @Autowired
    private CatalogService service;
    @Rollback(true)
    @Test
    public void testSimplePersist()
    {   
        Term term = new Term();
        term.setDescription("Description");
        term.setName("BirdSubject8");
        term.setIsEnabled("F");
        term.setIsSystem("F");
        term.setTermType("TERM");
        service.createTerm(term);
    }
}

和我的Spring配置

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="catalog2"></property>
</bean>

<bean id="catalogService" class="com.moo.catalog.service.CatalogService">
    <property name="termDao" ref="termDao"></property>
</bean>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven />
2个回答

14

除了@TransactionConfiguration之外,您还需要使用@Transactional

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "/META-INF/catalog-spring.xml" }) 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
@Transactional
public class TermTest { ... }

我爱你!(不过你回答得太快了,需要再等4分钟才能接受答案) - willcodejavaforfood
1
如果我及时出现,这就是我会给出的答案 (+1)。 - Sean Patrick Floyd

0

在Spring 4.0之后,因为TransactionConfiguration已被弃用

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/config/spring-config.xml")
@Transactional
public class UserTest {
    @Rollback
    public void test(){
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接