【发布时间】:2020-04-04 06:38:45
【问题描述】:
我正在使用没有 Spring 的 MyBatis。我还必须使用另一个 API 提供的 JDBC 连接。
所以我正在像这样创建我的 SqlSession:
Connection conn = //... provided by some API
LOGGER.debug("Connection autocommit: " + conn.getAutoCommit()); // Autocommit is true by default
conn.setAutoCommit(false); // So I set it to false first
LOGGER.debug("Connection autocommit after: " + conn.getAutoCommit()); // It is now false
return factory.openSession(conn);
然后在我的代码中:
try (SqlSession session = ...) {
// Invoke mapper method here
session.commit();
} catch (Exception ex) {
session.rollback();
throw ex;
}
但是,我发现调用 session.commit() 什么都不做(即没有找到关于提交的日志),并且确实没有提交更改。 MyBatis 的 commit() 似乎由于某种原因被忽略了。
如果我不强制 autocommit 为 false,则将提交更改(无需调用 session.commit()),但我也无法回滚错误。
我的 SqlSessionFactory 是这样创建的:
configuration = new Configuration();
configuration.setDatabaseId(SQLSERVER_DATABASE_ID);
configuration.addMapper(ApprovalHierarchyMapper.class);
factory = new SqlSessionFactoryBuilder().build(configuration);
如何在没有 Spring 和提供的 JDBC 连接的情况下实现编程控制的事务?
【问题讨论】:
标签: mybatis