在方法的服务层类中,我正在按以下方式调用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();
}