我很想知道Java究竟何时与数据库通信已创建事务。在JDBC中将autocommit设置为false或在Spring中创建@Transactional方法时,是否确实与数据库进行了通信以通知它事务更改?
问题的一些背景: 我有一种方法将被称为数十亿次:
@Transactional
void addData(Object[] data);
现在,此方法实际上并未将数据持久保存到数据库中,而是将其存储在缓冲区中。当缓冲区溢出时,该方法将批量更新中的所有数据刷新到数据库。
这意味着如果该方法被称为十亿次 - 它实际上将数据持久存储到数据库十万次左右。 但这是否意味着对于每次调用此方法,Spring会联系数据库以创建SAVEPOINT或开始事务或其他什么? 或者,在第一次刷新数据库时,这些信息会被删除吗?
我担心的是,我不希望这种方法导致20亿个数据库请求,并且事务状态更新(一个用于事务启动,一个用于事务结束)。
如果没有数据刷新到数据库,还会发生事务提交(在实际数据库请求的意义上)吗?