?????????????????????????

????????????????????????????????TransactionDbUnitTestExecutionListener??CHAIN??????????TransactionDbUnitTestExecutionListener???????????????????????????TransactionDbUnitTestExecutionListener??CustomTransactionDbUnitTestExecutionListener??

public class CustomTransactionDbUnitTestExecutionListener extends TestExecutionListenerChain {

    private static final Class<?>[] CHAIN = { TransactionalTestExecutionListener.class??
            CustomDbUnitTestExecutionListener.class };

    @Override
    protected Class<?>[] getChain() {
        return CHAIN;
    }
}

???????????????????????

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-test.xml")
@TestExecutionListeners({
        DependencyInjectionTestExecutionListener.class??
        DirtiesContextTestExecutionListener.class??
        CustomTransactionDbUnitTestExecutionListener.class??
        ForeignKeyDisabling.class})

???????@Transactional????????????

????????spring-dbunit-test???????????????????@Transactional?????????????ü????????????????????????@Transactional??

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-test.xml")
@Transactional
@TestExecutionListeners({
        DependencyInjectionTestExecutionListener.class??
        DirtiesContextTestExecutionListener.class??
        CustomTransactionDbUnitTestExecutionListener.class??
        ForeignKeyDisabling.class})

??????????????????????????

org.springframework.transaction.TransactionSystemException: Could not roll back JPA transaction; nested exception is javax.persistence.PersistenceException: unexpected error when rollbacking

at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:544)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:846)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:823)

at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:588)

at org.springframework.test.context.transaction.TransactionalTestExecutionListener.endTransaction(TransactionalTestExecutionListener.java:297)

at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:192)

……

Caused by: javax.persistence.PersistenceException: unexpected error when rollbacking

at org.hibernate.ejb.TransactionImpl.rollback(TransactionImpl.java:109)

at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:540)

... 32 more

Caused by: org.hibernate.TransactionException: rollback failed

at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:215)

at org.hibernate.ejb.TransactionImpl.rollback(TransactionImpl.java:106)

... 33 more

Caused by: org.hibernate.TransactionException: unable to rollback against JDBC connection

at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167)

at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:209)

... 34 more

Caused by: java.sql.SQLNonTransientConnectionException: connection exception: connection does not exist

at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

……

... 35 more

Caused by: org.hsqldb.HsqlException: connection exception: connection does not exist

at org.hsqldb.error.Error.error(Unknown Source)

at org.hsqldb.error.Error.error(Unknown Source)

... 40 more