• 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(强制缓存中数据与数据库中同步)
  • 相关阅读:
    redis介绍;特性介绍
    日常2018/4/9---b/s和c/s架构分别是什么?区别?
    持续集成实践---基于ant+jmeter+jenkins接口CI
    面向过程 和 面向对象个人理解
    记一次vc++6.0中程序正常,转 vs2019 c++后报错的问题
    C# 调用C++ dll EntryPointNotFoundException错误
    uniapp踩坑记录(持续更新)
    uniapp引用组件rate评分无法点击引起对style scoped学习
    sql server之time字段详解
    sql server之timestamp字段详解(转)
  • 原文地址:https://www.cnblogs.com/myfaith/p/4359304.html
Copyright © 2020-2023  润新知