Hibernate查询出的实体都是持久化对象,如果调用该对象的set方法,那么在事务递交时,Hibernate会把你设置的值自动更新到数据库中。
解决方案一
查询方法添加@Transactional(readOnly = true) 事务设置为只读属性
解决方案二
查询方法添加 @Transactional(propagation = Propagation.NOT_SUPPORTED)不在事务中运行
解决方案三
如果是表关联字段,可以在注解中添加属性updatable = false
例:
@JoinColumn(updatable = false)
此时,当事务递交,进行数据更新时
例:
控制台打印如下
The [engineKeyPair] property of the [cn.unitid.flame.gateway.gmssl.certificate.entity.Certificate] entity was modified, but it won't be updated because the property is immutable.
该属性不可变,因此不会更新。此时的不可变仅针对字段变更的自动行为