我试图理解为什么在某些情况下我需要使用@Transactional,让我们看看。
如果我在没有@Transactional 注释的情况下使用此方法,jboss 会在日志中返回:“自己关闭连接。为你关闭连接”。
public void doSomething() {
((Session) em.getDelegate()).doWork(new Work() {
@Transactional(TransactionPropagationType.NEVER)
public void execute(Connection connection) throws SQLException {
StringBuilder sqlSP = new StringBuilder();
sqlSP.append("{ call ");
sqlSP.append("myprocedure");
sqlSP.append("(?)}");
connection.setReadOnly(true);
CallableStatement cs = connection.prepareCall(sqlSP.toString());
cs.setInt(1, 1020);
cs.execute();
//FORCE A EXCEPTION and JBOSS SHOW "Closing connection for you"
throw new MyException("FATAL ERROR");
}
});
}
但是当我输入“@Transactional”时,问题就消失了,我不明白为什么。有人可以解释一下吗?