在方法的服务层类中,我正在按以下方式调用DAO层的delete方法和insert方法。

服务等级:

 @Service("workflowService")
    @Transactional
    public class WorkFlowServiceImpl implements WorkFlowService {
    @Autowired
    WorkFlowDao workFlowDao;
        public String deleteSelectedTask(String strWorkFlowName, int intIndex) {
                JSONObject res = new JSONObject();
                try{
                    List<WorkflowPermission> listWorkflowPermission = workFlowDao.getWorkFlowPermissionByName(strWorkFlowName);
                    listWorkflowPermission.remove(intIndex-1);
                    boolean flag = workFlowDao.deleteWorkFlowPermissionByName(strWorkFlowName);
                    for(int i =0;i<listWorkflowPermission.size();i++){
                        listWorkflowPermission.get(i).setOrderNo(i+1);
                        flag = workFlowDao.createWorkFlowPermission(listWorkflowPermission.get(i));
                    }
                    if(flag==true){
                        res.put("status", "Success");
                        res.put("message", "Task Deleted Successfully");
                    }else{
                        res.put("status", "Fail");
                        res.put("message", "Cannot Delete Task");
                    }
                }catch (Exception e) {
                    logger.error(e);
                }
                return res.toString();
            }
    }


在这里,首先,我从DAO获取一个列表,并删除该表上的条目,并使用for循环,通过调用setOrderNO更改顺序将其插入为新记录。

DAO类:

 @Repository("workflowDao")
    public class WorkFlowDaoImpl implements WorkFlowDao {
    @Autowired
    private SessionFactory sessionFactory;
    private Session session;
    @Override
        public boolean deleteWorkFlowPermissionByName(String strWorkFlowName) {
            try{
                session = sessionFactory.getCurrentSession();
                SQLQuery sqlQuery= session.createSQLQuery("DELETE FROM UPS_ESC_WTL WHERE workflow_name='"+strWorkFlowName+"'");
                sqlQuery.executeUpdate();
                session.flush();
                return true;
            }catch(Exception e){
                e.printStackTrace();
            }
            return false;
        }

    public boolean createWorkFlowPermission(
                WorkflowPermission workFlowPermission) {
            boolean blStatus = false;
            try {
                session = sessionFactory.getCurrentSession();
                session.saveOrUpdate(workFlowPermission);
                session.flush();
                blStatus = true;
            } catch (Exception e) {
                logger.error(e);
                throw new DataAccessException();
            }
            return blStatus;
        }
    }


在调试代码时,我正在获取列表表单数据库,并且删除了表中的所有记录。在遍历列表时,将正确地执行插入记录的方法。但是它没有反映在数据库中。
我想为此使用回滚处理事务,并将记录插入到db。另外我在applicationContext.xml中添加了HibernateTransactionManager

<tx:annotation-driven transaction-manager="transactionManager"/>
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>


谁能帮我解决这个问题。提前谢谢了。

最佳答案

将注释@Transactional添加到共享同一数据库事务所需的所有方法中,然后回滚将应用于所有操作。



public class ServiceFirstImpl

@Autowired
FirstDao firstDao;

@Autowired
SecondDao secondDao;


@Transactional
public void mixActions(){
    firstDao.delete();
    secondDao.create();
}

07-24 09:46
查看更多