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(强制缓存中数据与数据库中同步)
上一篇:《笨方法学Python》加分题16


下一篇:hibernate.hbm2ddl.auto=update不能自动生成表结构