[英]@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.