无法获取要回滚的jdbctemplate

smtd7mpg  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(334)

我使用的是spring3、java6和oracle。我有一个服务类,实现了一个接口,通过接口调用dao。
如果第二次插入失败,我希望第一次插入回滚。对于第二次插入,我只是抛出一个runtimeexception来测试第一次的回滚。它从不回滚。数据库里只剩下一行了。
我错过了一步吗?我确保使用一个接口,因为我读到spring使用aop代理来处理需要和接口的事务。
服务:

@Service
public class APIServiceImpl implements APIService {

    @Override
    @Transactional
    public void testPromotion(int duration, String productId, String offerId) {
        Integer promotionId = apidao.insertPromotion("3", productId);
        Integer test = apidao.insertTest(offerId, productId);   //runtime exception
    }
}

道:

@Component
public class ApiDaoImpl implements ApiDao {

   public Integer insertPromotion(final int offerId, final String promoCode) {
        final String sqlText = "INSERT INTO promotion ("
                + "                promotion_id, "
                + "                offer_id, "
                + "                promotion_code, ") "
                + "             VALUES ("
                + "                seq_partner_promotion.nextval, "
                + "                ?, "
                + "                ?, ") ";

        return myJdbcTemplate.update(sqlText, offerId, promoCode);
    }

    public Integer insertTest(final int offerId, final String promoCode) {
        throw new RuntimeException();
    }

应用程序上下文:

<bean name="myJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <constructor-arg ref="myDataSource"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="myDataSource"/>
</bean>
eufgjt7s

eufgjt7s1#

用@repository(而不是@component)和@transactional(以确保它与调用者参与相同的事务)标记apidaoimpl如何?

相关问题