在service层处理事务,dao层不做任何处理,直接把异常抛出。

解决方案 »

  1.   

    楼上的意思是:
    package com.dao;
    public class ADao
    {
        public boolean insert(Object A) throws SQLException
        {
            String sql="insert into table values(?,?,?)";
            try
            {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:sid","scott","tiger");
                //此处要不要禁用自动提交呢?
                conn.setAutoCommit(false);
                PreparedStatement pstmt=conn.createPreparedStatement();
                pstmt.setString(1,"a");
                ...
                pstmt.executeUpdate(sql);
            }catch(ClassNotFoundException cnfe)
            {
                 
            }catch(SQLException se)
            {
                 throw SQLException;
            }        
        }
        //....
    }public class BDao
    {
        public boolean insert(Object B) throws SQLException
        {
            String sql="insert into table values(?,?,?)";
            try
            {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:sid","scott","tiger");
                //此处要不要禁用自动提交呢?
                conn.setAutoCommit(false);
                PreparedStatement pstmt=conn.createPreparedStatement();
                pstmt.setString(1,"a");
                ...
                pstmt.executeUpdate(sql);
            }catch(ClassNotFoundException cnfe)
            {
                 
            }catch(SQLException se)
            {
                 throw SQLException;
            }        
        }
        //....
    }package com.service;
    public class Service
    {
         public boolean addNewBusiness(Object A,Object B)
         {
              ADao aDao=new ADao();
              BDao bDao=new BDao();
              if(....)
              {
                    aDao.insert(A);
                    bDao.insert(B);
                    ///请问这里如何提交?
              }
              else
              {
                    ///请问这里如何回滚?
              }
         }
         //.....
    }
      

  2.   

    我的意思是connection的建立,关闭都放在service层。当然这样做,会给你带来一些困扰,就是说service层也会涉及到使用那种dao工具,我也在想这个问题。但是这样做会有很多好处给你。最近想写一点关于这个的文章。
      

  3.   

    哦,期待您的文章...
    那如果像你说的那样的话,DAO和Service层有何区别呢?
      

  4.   

    这个问题很好啊,关注。如果不使用Spring的声明式事务来管理,纯用Hibernate,不知道如何处理Service层下多个Dao方法调用的完整性。
      

  5.   

    〉DAO和Service层有何区别呢?DAO做的只是关于数据的处理。而service层作的是关于企业逻辑的处理,比如说,什么样的用户有什么权限,商品的打折等等都应该属于service层的工作。可以说,service层使用dao层返回的数据,按照企业逻辑给用户合适的结果。再做更新、添加时,service层根据用户的指令,结合企业逻辑,要求dao作相应的数据操作。http://blog.csdn.net/idilent/archive/2007/01/04/1473503.aspx
      

  6.   

    楼上意思是 dao层做增删改时,service只管用就行了?不用管数据是否符合业务逻辑中要求的事务原子性?
      

  7.   

    数据是否符合业务逻辑应该是service层说了算吧。http://blog.csdn.net/idilent/archive/2007/09/20/1792721.aspx
      

  8.   

    那位高人有 Struts + Spring + Hibernate 的演示项目(包括事务处理),也可以只用Struts + Hibernate (包括事务处理),如果是按照 View + Controller + Service + DAO + Data 方式分层的话,给偶发一份: [email protected]
    本人另开贴散分,说到做到。