使用Hibernate查询数据时会Update的原因

本文探讨了一个关于使用Struts+Spring+Hibernate框架开发项目时遇到的问题:查询数据时Hibernate异常地更新了数据。通过分析发现这是因为在setter/getter方法中设置了空字符串导致的。文章给出了避免此问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司使用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在从数据库中取出该空值对象时,也会将其设置为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值