Spring MVC+Hibernateはsession.udate(obj)を使って未更新の問題です.
2414 ワード
1、スプリングで事務を制御する
2、session.update(obj)を使って更新を実行する
spring事務配置:
サービス方法:
dao方法:
実行結果:実行中にエラーがなく、データも更新されていません.
serviceの方法を変更します.
実行結果:更新に成功しました.
理由:springを使って事務を制御するなら、配置が正しいかどうかに注意してください.springを使って事務を制御しないなら、session.udateの後にsession.flushを入れます.
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( )