在Spring + MyBatis中,我使用以下代码在事务中对Postgres数据库执行一些更改:
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus status = dataSourceTransactionManager.getTransaction(definition);
try {
// do insert, updates, deletes etc. on the DB
dataSourceTransactionManager.commit(status);
return stuffWithPksOfInsertedRecords;
} catch (Exception e) {
dataSourceTransactionManager.rollback(status);
return originalStuff;
}
问题是有时我的代码会返回 stuffWithPksOfInsertedRecords (即通过提交而不会抛出异常),但实际上插入到事务中的记录在提交后不会写入数据库,即我现在拥有实际上并未存储在数据库中的对象。
这种行为有什么可能的解释吗?我做错了吗?
请注意,交易可能需要一些时间才能完全执行,即使是几分钟,这可能是问题吗?默认交易可以到期吗?
谢谢