Je construis actuellement un ressort d'utilisation d'application comme cadre. et je veux tester la transaction par lots en utilisant le printemps. voici mon code:spring @Transactional ne fonctionne pas?
public class SqlMapTestDao extends SqlMapClientDaoSupport implements TestDao {
public List<Test> getAllTest() {
return getSqlMapClientTemplate().queryForList("getAllTest");
}
public Test getTest(int param) {
return (Test)getSqlMapClientTemplate().queryForObject("getTest" , param);
}
public void insertTest(Test test) {
getSqlMapClientTemplate().insert("insertTest", test);
}
@Transactional(readOnly = false)
public void insertBatch(List<Test> batch) throws SQLException{
for(Test test : batch) {
getSqlMapClientTemplate().insert("insertTest", test);
}
}
}
et j'essaie d'insérer une même clé primaire comme ci-dessous. Quand il s'exécute avec l'ID 1, il va lancer l'erreur, et je m'attends à ce que toutes les requêtes soient annulées. mais 7 entrer dans la base de données. pourquoi il ne peut pas reculé? Où ai-je tort? J'utilise ibatis et mysql comme base de données.
et voici la configuration xml:
<!-- Configures transaction management around @Transactional components -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- Resource loader for jdbc configuration -->
<context:property-placeholder location="WEB-INF/jdbc.properties"/>
<!-- Local Apache Commons DBCP DataSource that refers to a combined database -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- SqlMap setup for iBATIS Database Layer -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- testing purpose -->
<bean id="testDao" class="com.shop.cart.dao.ibatis.SqlMapTestDao">
<property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
La classe avec l'annotation @Transactional est-elle connectée par Spring? Le ressort doit faire le câblage afin qu'il puisse installer des proxies. – Pace
oui je fais. . suis-je dans la voie de droite pour annuler ma transaction? –
Vous avez configuré le bean testDao dans Spring, mais obtenez-vous une instance testDao dans votre test de Spring? Pouvez-vous poster toute votre classe de test? – gdj