PersistenceHelper-context.xml的回滚交易似乎被回滚,但他们没有在数据库
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!---->
<property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver"/>
<property name="url" value="jdbc:hsqldb:mem:mydb"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
depends-on="dataSource" name="_sessFac" >
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="hibernate.cfg.xml.incDTD"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.shutdown">true</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
类的头
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:PersistenceHelper-context.xml"})
@TransactionConfiguration(defaultRollback = true, transactionManager = "transactionManager")
@Transactional
public class BaseClass extends BaseTestClass{//.....}
然后我所有的班,我想利用交易都来自BaseClass的派生,即 public class FooTest extends BaseClass
此外,当我跑我的代码,我看到以下内容:
HibernateTransactionManager | Initiating transaction rollback
[13 Jul 2012 11:29:13,738] DEBUG HibernateTransactionManager | Rolling back Hibernate transaction on Session [[email protected]]
[13 Jul 2012 11:29:13,738] DEBUG HibernateTransactionManager | Triggering afterCompletion synchronization
[13 Jul 2012 11:29:13,738] DEBUG TransactionSynchronizationManager | Clearing transaction synchronization
[13 Jul 2012 11:29:13,738] DEBUG TransactionSynchronizationManager | Removed value [[email protected]] for key [[email protected]] from thread [main]
[13 Jul 2012 11:29:13,738] DEBUG TransactionSynchronizationManager | Removed value [[email protected]] for key [[email protected]b] from thread [main]
[13 Jul 2012 11:29:13,738] DEBUG HibernateTransactionManager | Closing Hibernate Session [[email protected]] after transaction
[13 Jul 2012 11:29:13,738] DEBUG SessionFactoryUtils | Closing Hibernate Session
[13 Jul 2012 11:29:13,738] INFO TransactionalTestExecutionListener | Rolled back transaction after test execution for test context
然而,当我从我的数据库中删除,更改是持久的,我未来的测试失败,因为表中缺少一个对象。我错过了什么吗?任何方向将不胜感激。提前致谢!!
你如何获得Hibernate会话?您确定您使用的会话是事务回滚的会话吗? – axtavt 2012-07-13 18:00:32
'Session session = _sessFac.openSession();'然而,我为每个@Test获取一个新会话。虽然我认为这是合法的,因为类顶部的@Transactional注释包含事务中的每个方法。 – nook 2012-07-13 18:09:14
你确定hsqldb支持事务吗?并非每个数据库都支持它们例如,在使用MyISAM存储引擎表时,MySQL不支持事务,只有InnoDB和BDB。检查这个hsql文档。 – Matt 2012-07-13 18:00:55