zoukankan      html  css  js  c++  java
  • SpringMVC+Hibernate 使用 session.update(obj) 未更新的问题

    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(强制缓存中数据与数据库中同步)
  • 相关阅读:
    Spring Boot开发Web应用
    使用阿里云Docker镜像加速
    六种微服务架构的设计模式
    HashMap按键排序和按值排序
    Docker搭建本地私有仓库
    Ubuntu 14.04主机上部署k8s集群
    Ubuntu 16.04下搭建kubernetes集群环境
    Docker中images中none的镜像删除
    docker 下 alpine 镜像设置时区的有效办法
    offsetLeft和style.left的区别
  • 原文地址:https://www.cnblogs.com/myfaith/p/4359304.html
Copyright © 2011-2022 走看看