我有一个执行简单选择查询的 DAO 方法:
@Transactional
public List<Object[]> getMyTableData(Long someId)
{
Session session = (Session) getEntityManager().getDelegate();
return session
.createSQLQuery("SELECT * FROM my_table where some_id = :someId")
.addEntity(MyTable.class)
.setParameter("someId", someId)
.list();
}
当我运行它时,我在日志中发现了两个查询:
- 成功获得结果的“select * from MyTable where some_id = ...”查询
之后我在我的日志中找到了这个:
org.springframework.orm.jpa.JpaTransactionManager:启动事务提交 org.springframework.orm.jpa.JpaTransactionManager:在EntityManager [org.hibernate.ejb.EntityManagerImpl@162add4]上提交JPA事务 org.hibernate.transaction.JDBCTransaction:提交org. hibernate.event.def.AbstractFlushingEventListener:处理刷新时间级联 org.hibernate.event.def.AbstractFlushingEventListener:刷新:0 次插入,1 次更新,0 次删除到 2 个对象
然后它触发另一个查询“Update my_table set ....”
为什么要执行此更新查询?