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(强制缓存中数据与数据库中同步)

 

你可能感兴趣的:(Hibernate)