@RequestMapping("live/add")
    @Transactional
    public void saveCmsLive(HttpServletRequest request, HttpServletResponse response,CmsLive cmsLive,CmsLiveNum cmsLiveNum){
        (1).CmsLive live = cmsLiveMng.addCmsLive(cmsLive);
        cmsLiveNum.setLiveId(live.getLiveId());
        (2).cmsLiveNumMng.addCmsLiveNum(cmsLiveNum);
        String message = Constants.API_MESSAGE_SUCCESS;
        String code = ResponseCode.API_CODE_CALL_SUCCESS;
        String body = "\"\"";
        ApiResponse apiResponse = new ApiResponse(request, body, message, code);
        ResponseUtils.renderApiJson(response, request, apiResponse);
    }如上述代码(标记了(1),(2))我第一句执行成功了 然后第二句执行失败了 然后第一条的数据还是插入了数据库我service层和controller层都加了事务注解,对应的xml文件也有 还是没回滚
在spring-hibernate配置文件中也配置了 <bean id="treeInterceptor" class="org.fqworld.common.hibernate4.TreeIntercptor"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <bean name="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
</bean>

解决方案 »

  1.   

    ORM 之 事务处理http://www.verejava.com/?id=17045470128784
      

  2.   

    controller的bean是交给spring mvc配置文件扫描的,service层才是spring管理。你注解加载controller需要在mvc配置问价加上
      

  3.   

    解决方式:
    1.新写一个service函数,包含(1)(2)的执行逻辑
    2.在这个函数上添加 @Transactional
    3.在Controller中调用这个函数
      

  4.   

    你事务为什么会写在cotnroller层呢,https://www.cnblogs.com/hjwublog/p/5626465.html
      

  5.   

    service是spring支持事物的最高级别,不支持controller级事物,如果需要,建议你可以使用 @Transactional(propagation = Propagation.PROPAGATION_REQUIRED)强制建立统一事物事物传播分为三种
    PROPAGATION_REQUIRED 强制使用同一事物
    PROPAGATION_REQUIRES_NEW 调用创建新事物,新事物与原事物独立
    PROPAGATION_NESTED 一般用于分布式,做最终一致性另外建议:
    1. Conroller层完成基本的接口工作,完成数据完整性校验和数据格式转换工作
    2. Service层实现事物的处理与实现具体业务逻辑
    3. Dao层实现基本是数据逻辑 CRUD,不参与业务逻辑
      

  6.   

    异常没有捕捉 控制台输出具体报错了的,注解放在controller层只是为了尝试一下看了下3l的答案貌似是正确的 不知道各位怎么看