第一次访问查询会执行update语句,第二次就不会
return this.getHibernateTemplate().get(Team.class, id);
String hql=" from Team where id= ? ";
List list=this.getHibernateTemplate().find(hql, id);
return (Team)list.get(0);
近项目中使用SSH框架发现一个奇怪的问题,在执行完this.getHibernateTemplate().find方法之后,后台会打出一条Hibernate:Select .....查询语句,但是接下来会打印出一条update语句。
查找所有的配置文件之后,最后终于发现原因是因为底层DTO映射类中属于的Set方法中发生变化,例如正常情况应该是:
public void setComname(String comname){
this.comname = comname;
}
但是我写成:
public void setComname(String comname){
this.comdesc = StringUtils.rightTrim(comdesc);
}
将查询出来的comname值的右空格进行截取了,以致hibernate判断查询出来的对象发生了变化,所以会自动执行更新操作,同时查询出来如果是全表记录,则会自动执行全表的update操作,也就是很多条update语句。
如果出现这种问题首先检查是否对属性的Set方法做过修改。