此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【autonomy】截止到2008-07-23 08:23:00的历史汇总数据(不包括此帖):
发帖的总数量:22                       发帖的总分数:880                      每贴平均分数:40                       
回帖的总数量:20                       得分贴总数量:0                        回帖的得分率:0%                       
结贴的总数量:15                       结贴的总分数:540                      
无满意结贴数:7                        无满意结贴分:280                      
未结的帖子数:7                        未结的总分数:340                      
结贴的百分比:68.18 %               结分的百分比:61.36 %                  
无满意结贴率:46.67 %               无满意结分率:51.85 %                  
楼主加油

解决方案 »

  1.   

    事务应该针对services方法,这样可以避免一个service方法部分执行
      

  2.   

    http://bbs.langsin.com/index.php?fromuid=11313
      

  3.   

    事务是对Service层有效,
    就是说
    如果你的Action分别调用Service的不同方法,每一次调用就是一次事务。
    所以你的调用时进行了三次事务。
    你应该把三次调用放在Service里面进行。然后Action一次调用Service的方法。这样是一次事务,如果三个调用有一个失败就会回滚。
      

  4.   

    mikesu 你说的有道理,我感觉应该在USERDAO里面来写个方法把这三个
    操作放一块吧,因为数据操作都放到DAO里面了
      

  5.   

    数据库操作肯定是都放在dao里,但是那只是单纯的数据库操作而已,没有业务可言
    比如某个业务要往两个表同时插入数据,如果其中一个出错,就回滚
    那么这个事务肯定是在service层,你在dao层的事务表示你开启了两个完全独立的事务所以你要把事务建立在业务层,让业务层中的dao方法,都在一个事务中,只需要
    stockService.addMethod(stock,storage,book);
    然后在service中的addMethod方法中加入类似
    stockDao.addStock(stock);
    stockDao.addStorage(storage);
    stockDao.addBook(book); 
    最后更改事务配制
    expression="within(org.aloha.bookstore.service.impl..*)" /> 
      

  6.   

    哪位大哥帮我看看SPRING+HIBERNATE事务不起作用的问题
    下面是配置文件
    <aop:config>
    <aop:pointcut id="jdbcServiceMethod"
    expression="within(org.aloha.bookstore.dao.impl..*)" />
    <aop:advisor pointcut-ref="jdbcServiceMethod"
    advice-ref="jdbcTxAdvice" />
    </aop:config>
    <tx:advice id="jdbcTxAdvice"
    transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="add*" propagation="REQUIRED"/>
    </tx:attributes>
    </tx:advice>
    action:
    stockService.addStock(stock,storage,book);
    service:
    stockdao.addStock(stock,storage,book);
    stockdao:public void addStock(Stock stock ,Storage storage,Book book) throws Exception {
    Session session = null;

    session = getSession();
    session.save(stock);
    session.save(storage);
    session.save(book);
    //session.flush();
    session.close(); }
    其中STOCKSERVICE和STOCKDAO分别实现接口ISTOCKSERVICE,ISTOCKDAO
      

  7.   

    上面是我改了以后的内容,但还是不行
    <tx:method name="add*" propagation="REQUIRED"/>这里加了事务行为
      

  8.   

    expression="within(org.aloha.bookstore.dao.impl..*)" /> 你的service类也在org.aloha.bookstore.dao.impl包里??
      

  9.   

    终于解决了,谢谢Landor2004 SERVICE不是放在DAOLim
    我的SERVICE.IMP包名写错了(SERVICEIMPL)