【发布时间】:2014-04-04 06:46:00
【问题描述】:
通过 Spring 配置文件注入的 JdbcTemplate-OracleDataSource 在 Oracle 11g 中插入值。 事务通过由 DataSourceTransactionManager 管理的 @Transactional 完成。
问题1)如何将自动提交值设置为false?我猜默认值为true。 以下是代码 sn -p :
DataSource ds = (DataSource)ctx.getBean("dataSourceBean");
try {
ds.getConnection().setAutoCommit(false);
System.out.println("Autocommit " +ds.getConnection().getAutoCommit());
} catch (SQLException e) {
e.printStackTrace();
}
println 语句仅给出true。
还在 DAO 类的 insert 方法中打印了 getAutoCommit 值。也有成真。
问题2)对于违反唯一约束,我需要回滚。
在这种情况下,DuplicateKeyException 被抛出,它被 SQLIntegrityConstraintViolationException 包裹。
所以
@Transactional(rollbackFor = ?.class) 必须有哪个异常?
【问题讨论】:
-
一次只问一个问题。
-
连接(或其代理)可能会返回 true,因为提交是自动处理的(由容器)而不是由您处理。
标签: java oracle autocommit