Hibernate 通过 HQL 获取的对象被 JdbcTemplate 手动 update 会发生什么?
大致还原流程:
HQL:查询到一条 Demo 数据放到 demo 对象中
FROM DEMO WHERE ID = ?0;
//...对 demo进行一系列修改
JdbcTemplate:根据上面拿到的 demo 对象修改 DEMO 表
UPDATE DEMO SET XXX=1,XXX=2 WHERE ID = 1;
请求执行后,Console 中先出现了 JdbcTemplate 执行的 SQL 日志,又出现了 Hibernate 执行的 SQL 日志,都是在修改 demo 表,此时该程序阻塞。
JdbcTemplate 和 Hibernate 不在同一个事务下。
问题:因为是通过 HQL 拿的持久对象,对象发生 set 操作后,Hibernate 会把持久对象的值修改到数据库,这里我知道只要把设置关闭Hibernate自动提交或者不取持久对象就可以了,但还是奇怪的是为什么会发生阻塞
1. 题主怎么是Hibernate和JdbcTemplate都操作吗,建议最好统一
2. 除了update,有其他事物操作吗,是不是其他操作没有结束,没有提交事物?
同一id肯定是要锁的,但是应该很快就会执行完成,几乎感觉不到锁了才对的