Spring MVC+Hibernateはsession.udate(obj)を使って未更新の問題です.

2414 ワード

1、スプリングで事務を制御する
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>

  
サービス方法:
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.udateの後にsession.flushを入れます.
 
 
             
1. , 。。
2. session.update session.flush( )