Hibernate查询数据库记录自动修改的问题

发布时间 2023-12-11 15:57:09作者: 王希知

问题描述

在项目中使用了hibernate进行查询记录,但是每次查询了记录后,发现控制台打印的sql不仅有select查询语句,还有update语句,但代码中并没有执行update的代码,就很奇怪???

分析排查

通过对方法内代码的debug调试,发现在跳出service方法后update语句sql才执行,这时候我就想到了spring的事务切面,它可以一个方法为原子事务进行事务提交,检查spring事务配置发现果然如此
原来是因为这个service方法的名称没有使用find或者get开头,所以导致我在方法内对查出的数据进行修改后触发了提交事务的操作,这个是hibernate的机制,对查出的数据进行修改,会同步到数据库中。

解决方案

方式一:更新方法名为get或者find开头,就可以不再触发提交事务,不会对查出数据进行修改操作
方式二:在配置文件中增加当前方法名的配置,配置为只读

<tx:method name="selectOperatorList" read-only="true">