• 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(强制缓存中数据与数据库中同步)
  • 相关阅读:
    STL中的map
    HDU 4027 Can you answer these queries?
    HDU 2199 Can you solve this equation?
    USACO section1.2 Name That Number 命名那个数字
    HDU 3790 最短路径问题 (双重权值)
    [笔记]CiscoPT配置RIP
    [笔记]Cisco PT VLANTrunk配置
    iptables感悟Ubuntu
    CentOS网络配置
    Discuz X2 数据库备份功能分析
  • 原文地址:https://www.cnblogs.com/myfaith/p/4359304.html
Copyright © 2020-2023  润新知