Используя среду весеннего тестирования, мои транзакции не откатываются, и я совершенно не понимаю, почему. Я провел несколько дней, пытаясь найти ответы на SO, но безрезультатно, поэтому решил опубликовать.
Тестовый файл
@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. Необычно то, что нигде нет упоминания об откате. В журналах упоминается создание сеанса и вставка данных в базу данных, но ничего об откате.
Кто-нибудь, пожалуйста, помогите мне
@Transactional
это (спринг)? Что выводит журнал, когда регистратор дляorg.springframework.test.context
установлен наDEBUG
? Чем занимается ваш DAO? Вызывает ли онgetCurrentSession()
(правильно) илиopenSession()
(неправильно) наSessionFactory
? - person Sam Brannen   schedule 28.12.2013