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自动提交或者不取持久对象就可以了,但还是奇怪的是为什么会发生阻塞