公司使用Struts + Spring + Hibernate的框架开发项目,但在最近的开发中发现,每当查询数据时,hibernate都会Update所查询的内容,一开始以为是项目中在 Web服务器启动时查询出的那些静态信息造成的,因为大家到知道的,hibernate通过使用Update来持久化游离对象,我最初的想法是在Web服 务器启动时,通过hibernate加载的那些静态信息,用于在hibernate的缓存中有对应的OID,会定期的进行Update,但后来经过我将那 些静态信息去掉,发现问题依然存在,可见不是这静态信息的原因,这就奇怪了,在前一个项目中也是使用的是这个框架,但是并没有出现这个问题,通过对比了一 下两个项目的配置,虽然在一些细节上不尽相同之外,并没有什么区别,问了问当时参加培训时我的老师,他说他也遇到过这个问题,但是忘了怎么解决的了,当时 我就郁闷了。后来通过伟大的Internet,看到有高人说是因为在持久化类的setter/getter方法中设置空字符串等的默认值的原因。通过实 验,果然使这个原因。
原来如果在setter/getter方法中设置空字符串的默认值,我设置的是“”,hibernate取出来时还是会将空字符串设置为null,由于人 为的将null设置成“”,就相当于在取出值的同时,对该null字段进行了赋值,这就造成了缓存中的持久化对象与数据库对象的不一 致,hibernate会以为该持久化对象已被改变,因此才Update。
由于Hibernate是通过setter/getter方法对对象的属性进行赋值,因此,为了避免这种Update的情况出现,不要在setter/getter方法中赋值,而采用在属性定义时或构造函数中赋上默认值。
由于hibernate的原因,对空字符串对象即使赋予“”值,hibernate在从数据库中取出该空值对象时,也会将其设置为空。
update 会更新索引码 每次update都会导致索引更新
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MySQL for update 索引 mysql如何更新索引
| MySQL 索引1. MySQL 索引及优化实战(一)2. MySQL 索引及优化实战(二)(本文)| MySQL索引优化规则(接上篇文章)11. 使用短索引(又叫前缀索引)来优化索引前缀索引,就是用列的前缀代替整个列作为索引key,当前缀长度合适时,可以做到既使得前缀索引的区分度接近全列索引,同时因为索引key变短而减少了索引文件的大小和维护开销,可以使用 count(dist
MySQL for update 索引 mysql如何做到存在就更新不存就插入 主键需要建索引吗 MySQL 联合索引