Откат весенней транзакции, когда не выполняется SQL

1

Мне интересно, если мне нужно откат следующего, если orderId имеет значение NULL, и следующий оператор SQL никогда не запускается? Это упрощенный пример метода, который несколько больше.

Мне интересно, начинать транзакцию, но ничего не делать из-за того, что orderId является null, должно быть каким-то образом прекращено.

public OrderInfo insertOrder(String orderId) throws OrderException {
    OrderInfo orderInfo = null;
    DefaultTransactionDefinition txnDefinition = new DefaultTransactionDefinition();
    txnDefinition.setName("InsertOrder");
    txnDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    TransactionStatus txnStatus = transactionManager.getTransaction(txnDefinition);

    if (orderId != null && !orderId.isEmpty()) {
        try {
            orderInfo = orderDao.insertOrder(orderId);

            if (orderInfo != null && orderInfo.getOrderId() > 0) {
                transactionManager.commit(txnStatus);
            }
            else {
                transactionManager.rollback(txnStatus);
                throw new OrderException();
            }
        } catch (Exception e) {
            transactionManager.rollback(txnStatus);
            throw new OrderException();
        }
    }

// else rollback?

    return orderInfo;
}
  • 0
    «откат транзакции», когда вы не выполняете транзакцию в ее реальном смысле, зачем нам откат или какое состояние существует для отката? Мой ответ нет
Теги:
spring
spring-jdbc

1 ответ

1

Я предлагаю попробовать Spring TransactionTemplate

    TransactionTemplate tt = new TransactionTemplate(transactionManager, transactionDefinition);
    OrderInfo orderInfo = tt.execute(new TransactionCallback<OrderInfo>() {
        @Override
        public T doInTransaction(TransactionStatus status) {
            return orderDao.insertOrder(orderId);
        }
    });

это гарантия того, что все будет сделано правильно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню