簡體   English   中英

不執行任何SQL時的Spring事務回滾

[英]Spring Transaction Rollback When No SQL is Executed

我想知道如果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;
}

我建議嘗試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);
        }
    });

這是所有事情都會做對的保證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM