最近项目中使用hibernate框架发现一个奇怪的问题。
1、项目为java-web项目,hql查询代码写在业务逻辑类中,
2、看日志中,hibernate发出查询语句之后,就会出现x条update语句的日志,而x的值与查询结果数据的行数一致。
查找所有的配置文件之后,最后终于发现原因是因为底层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方法做过修改。
发表评论(对文章涉及的知识点还有疑问,可以在这里留言,老高看到后会及时回复的。)