1、使用spring控制事务
2、使用session.update(obj)执行更新
spring事务配置:
<bean id="transactionBese" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="edit*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="del*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="get*">PROPAGATION_NEVER</prop> </props> </property> </bean>
service方法:
public void enableJobtemplates(List<PlanJobtemplate> jobts) throws Exception { dao.updateAll(jobts); }
dao方法:
public void updateAll(final List list) throws Exception { getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException { for (Object obj : list) { session.update(obj); } return null; } }); }
Controller方法:
@RequestMapping("/jobtenable") public void EnableJobT(HttpServletRequest request,HttpServletResponse response) { try { List<PlanJobtemplate> jobts = planService.getJobTByIds(request.getParameterValues("id")); for(PlanJobtemplate jobt:jobts){ jobt.setState(EnumTools.UState.已禁用.ordinal()); } planService.editJobtemplates(jobts); utilService.printJsonResult(true, "操作成功!", "no", response); } catch (Exception e) { e.printStackTrace(); utilService.printJsonResult(false, "操作失败!", "no", response); } }
执行结果:执行过程中没报错,数据也没更新。
修改service方法:
public void editJobtemplates(List<PlanJobtemplate> jobts) throws Exception { dao.updateAll(jobts); }
执行结果:成功更新。
原因:如果使用spring控制事务,请注意配置是否正确,如果不是使用spring控制事务,在session.update后加一句session.flush
一般这种问题大概有两种原因
1.事务没有提交,下面已经说了。。
2.就是缓存问题建议在session.update后加一句session.flush(强制缓存中数据与数据库中同步)