Есть Spring проект, есть импорт данных:
this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
// очистка данных
String sqlClear = "UPDATE item_repository SET quantity = ?";
this.jdbcTemplate.update(sqlClear, 0);
// импорт новых данных
String sql = "UPDATE item_repository " +
"SET price = ?, quantity = ?, barcode = ? WHERE id = ?";
this.jdbcTemplate.batchUpdate(sql,list);
можно ли как то сделать это операции в транзакции? т.е. если произошла ошибка во второй операции, то восстанавливались бы данные.
Здравствуйте, Аноним, Вы писали:
>можно ли как то сделать это операции в транзакции?
можно:
Connection conn = null;
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false);
PreparedStatement ps1 = conn.prepareStatement("UPDATE item_repository SET quantity = ?");
ps1.setInt(1, 0);
ps1.execute();
PreparedStatement ps2 = conn.prepareStatement("UPDATE item_repository SET price = ?, quantity = ?, barcode = ? WHERE id = ?");
...
ps2.addBatch();
ps2.executeBatch();
conn.commit();
} finally {
if (conn != null)
conn.close();
}
Здравствуйте, Аноним, Вы писали:
можно и средствами спринга. смотрите в сторону @Transactional. как-то так:
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = MyException.class)
final void setBlaBla(){
try {
int anzahl = getSimpleJdbcTemplate().update(sql, new Object[] { verweis, anschriftschluessel });
logger.info("anzahl = " + anzahl);
if (anzahl != 1) {
throw new MyException("xxx");
}
} catch (DataAccessException e) {
throw new MyException(e);
}
}
Здравствуйте, sef, Вы писали:
sef>Здравствуйте, Аноним, Вы писали:
sef>можно и средствами спринга. смотрите в сторону @Transactional. как-то так:
sef>sef>@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = MyException.class)
sef>final void setBlaBla(){
sef>
а как проверить что точно работает на этом методе транзакция, как такое протестировать красиво?