簡體   English   中英

@Transactional不回滾事務

[英]@Transactional not rollback transaction

在Glassfish 4.1應用程序服務器上測試JTA1.2 @Transactiona l注釋時遇到問題。 如果我運行此bean的execute()方法:


@Named
@RequestScoped
public class IndexController {

    @Resource(name = "ds")
    private DataSource ds;

    @Transactional
    public void execute() throws SQLException, SystemException {
        try (Connection con = ds.getConnection();) {
            try (PreparedStatement ps = con.prepareStatement(
                    "INSERT INTO test(id) VALUES(1)"
            );) {
                ps.executeUpdate();
                throw new IllegalArgumentException();
            }
        }
    }
}

我得到預期的錯誤:

    Caused by: javax.transaction.RollbackException: Transaction marked for rollback.

但是當我執行select語句時:

SELECT * FROM test;

我看到插入了該行。 怎么了?

您正在使用哪個DB,它處於哪種模式? 也許我看不到,但是您在哪里回滾? 因此,該條目仍將被臨時寫入DB,直到您回滾為止。 嘗試這個:

@Transactional(rollbackOn={Exception.class})

通常,在catch塊中,您將調用rollback方法。 因為事務僅被標記為要回滾,所以您有責任將其回滾。

暫無
暫無

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

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