1

通过 Spring 配置文件注入的 JdbcTemplate-OracleDataSource 在 Oracle 11g 中插入值。事务通过由 DataSourceTransactionManager 管理的 @Transactional 完成。

问题1)如何将自动提交值设置为false?我猜默认值为true。以下是代码片段:

    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) 必须有哪个异常?

4

2 回答 2

2

1.将其存储在变量中

DataSource ds = (DataSource)ctx.getBean("dataSourceBean");
try {
    Connection con =ds.getConnection();
    con.setAutoCommit(false);
    System.out.println("Autocommit " +con.getAutoCommit());
} catch (SQLException e) {          
    e.printStackTrace();
}

当您再次调用 ds.getConnection() 时,您会从池中获得另一个连接

2.更改Weblogic DataSource配置
如果没有显式提交或回滚,则自动提交事务

于 2014-04-04T06:49:46.113 回答
1

而是以编程方式进行,检查您的连接池是否可以在从池返回连接时将自动提交设置为 false。DBCP 的BasicDataSource有这样的选项

如果抛出任何 RuntimeException,Spring 将进行回滚。

于 2014-04-04T07:12:01.517 回答