次のメソッドは2つのレコードを挿入しますが、この時点ではコミットしません。トランザクションでコードをラップし、isolationLevelを "READ_COMMITTED"に設定しましたが、これは動作していないようです。読み取り/ "SELECT"ステートメントはコミットされていないレコードを読み取ります。Springトランザクションが機能していない - JDBCTemplateがコミットされていないデータを読み取っています
これはどのように可能ですか?どこが間違っていますか?下記のコードを見て、私を助けてください。私は本当に感謝するでしょう〜
注:
私はDataSourceを取得するためにBoneCPを使用しています。 dbConnectionPool.initConnectionPool(dbName)は、BoneCPDataSourceをフェッチします。
@Override public void testDBCalls() { dBConnectionPool.initConnectionPool("titans"); DataSource dataSource = dBConnectionPool.getDataSource("titans"); DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); definition.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ); definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); DataSourceTransactionManager txManager = new DataSourceTransactionManager(dataSource); TransactionStatus transactionStatus = txManager.getTransaction(definition); try { try { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); String sql = "INSERT INTO groundwater(external_id,source_type) VALUES (12, 13);"; jdbcTemplate.update(sql); System.out.println("Successfully inserted - 1"); String sql2 = "INSERT INTO groundwater(external_id, source_type,) VALUES(123,45);"; jdbcTemplate.update(sql2); System.out.println("Successfully inserted - 2"); String sql3 = "select gw_id from groundwater where external_id= 123;"; System.out.println("Result : "+jdbcTemplate.queryForInt(sql3)); txManager.commit(transactionStatus); System.out.println("Commiting the trasaction..."); } catch (Exception e) { e.printStackTrace(); txManager.rollback(transactionStatus); System.out.println("Rolling back the transaction"); } } finally { try { dataSource.getConnection().close(); System.out.println("Closing the connection ..."); } catch (SQLException e) { e.printStackTrace(); } } }
なぜそれが動作しないのですか?あなたは確かに何かをコミットしていないが、すべてが単一のトランザクションから実行され、トランザクションは常にそれが行った変更を見ることができます。 –
[SQLトランザクションはどのように機能しますか?]の複製がありますか?(http://stackoverflow.com/questions/1668166/how-do-sql-transactions-work) –
@MDeinumありがとう!とった –